【问题标题】:Use cached array length, RangeError: Maximum call stack size exceeded"使用缓存数组长度,RangeError: 超出最大调用堆栈大小"
【发布时间】:2021-06-06 17:24:05
【问题描述】:
// quickSort
function quickSort(arr) {
   let len = arr.length;
   if(len <= 1) return arr;
   let idx = Math.floor(len / 2);
   let middleValue = arr.splice(idx, 1)[0];
   let left = [];
   let right =[];
   for(let i = 0; i < len; i++) {
       if(arr[i] < middleValue) {
           left.push(arr[i])
       } else {
           right.push(arr[i])
       }
   }
   return quickSort(left).concat([middleValue], quickSort(right));
};
quickSort([1,5,3,2,4,6,8,9])

问题: 这样写的时候报错“RangeError: Maximum call stack size exceeded”

for(让 i = 0; i

但它的工作原理是这样的,

for(让 i = 0; i

为什么?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    Array.prototype.splice 是变异操作。之后

    let middleValue = arr.splice(idx, 1)[0];
    

    您的实际arr.length 减一。这导致算法收敛。虽然len 仍然保留旧的全长值。

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 2018-02-06
      • 1970-01-01
      • 2021-05-30
      • 2021-07-11
      • 2019-07-05
      • 2015-04-26
      相关资源
      最近更新 更多