[英]Don't know why the length is undefined
我不知道为什么,但是由于某种原因,当我执行代码时,它说数组 right 的长度是未定义的,但是为什么 right 是未定义的? 在执行此代码时,我收到此错误:
" while (result.length < (left.length + right.length)) { ^
类型错误:无法读取未定义的属性“长度”
function merge(left, right) {
var result = [], iLeft = 0, iRight = 0;
while (result.length < (left.length + right.length)) {
if (iLeft === left.length) result = result.concat(right.slice(iRight));
else if (iRight === right.length) result = result.concat(left.slice(iLeft));
else if (left[iLeft] <= right[iRight]) result.push(left[iLeft++]);
else result.push(right[iRight++]);
}
return result;
}
function mergeSortRecursive (array) {
// base case
if (array.length <= 1) return array;
// divide and conquer!!
var leftHalf = array.slice(0, array.length/2);
var rightHalf = array.slice(array.length/2);
var leftSorted = mergeSortRecursive(leftHalf);
var rightSorted = mergeSortRecursive(rightHalf);
// merge subarrays
return merge(leftSorted, rightSorted);
};
merge(sampleArr);
console.log(sampleArr);
当调用merge
function 时,您没有提供所需的参数,因为在它的声明中您要求两个参数,并且在使用它时,您只提供一个,如Jeremy所述。
另外,我建议使用let
而不是var
,因为它使变量更安全地工作,将 scope 限制在块中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.