繁体   English   中英

不知道为什么长度未定义

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM