使用 array.length 时出现未定义错误
2014-03-31
83
我正在努力在 JavaScript 中实现冒泡排序方法,这是我当前的代码:
// Sort array (ascending)
function sort(array) {
var sortedArray = array;
// This swapped 'flag' tells the function whether or not it will
// need to iterate over the array again to continue sorting
var swapped = false;
for( var i = 1; i < array.length; i++ ) {
var prev = array[i - 1];
var current = array[i];
// If the previous number is > than the current, swap them around
if( prev > current ) {
swapped = true;
sortedArray[i] = prev;
sortedArray[i - 1] = current;
}
}
// If there has been a swap, sort over the array again
if( swapped ) {
return sort();
}
return sortedArray;
}
var testArray = [1, 4, 27, 3, 2];
// Run the sort function
sort(testArray); // [1, 2, 3, 4, 27]
当我运行这个代码时,我一直收到“无法读取未定义的属性 .length”
但是,我可以在 for 循环之前 console.log(array.length) 并且它返回一个值。
这是我的代码的 repl.it 。
为什么我会得到“未定义”?
2个回答
根据我的评论:您需要再次将
array
传递给排序函数:
if (swapped) {
return sort(array);
}
Andy
2014-03-31
// If there has been a swap, sort over the array again
if( swapped ) {
return sort();
}
您在此处返回没有参数的 sort()。
mpm
2014-03-31