Javascript JS合并排序函数内存不足

Javascript JS合并排序函数内存不足,javascript,arrays,sorting,mergesort,Javascript,Arrays,Sorting,Mergesort,我试图使用pop改进典型合并排序函数的时间。当我在Chrome中运行它时,它会因内存错误而崩溃。显然,这意味着它没有完成循环,但我不知道为什么 代码如下: function mergeSorted(a, b){ var c = []; while(a.length && b.length){ var a1 = a.pop(); var b1 = b.pop(); var aIndex = parseInt((a.length) - 1);

我试图使用pop改进典型合并排序函数的时间。当我在Chrome中运行它时,它会因内存错误而崩溃。显然,这意味着它没有完成循环,但我不知道为什么

代码如下:

function mergeSorted(a, b){
  var c = [];
  while(a.length && b.length){
    var a1 = a.pop();
    var b1 = b.pop();
    var aIndex = parseInt((a.length) - 1);
    var bIndex = parseInt((b.length) - 1);
    while(b[bIndex] >= a[aIndex]) c.push(b1);
    while(a[aIndex] >= b[bIndex]) c.push(a1);
  }
  return c;
}

var a = [1, 3, 5, 7, 7, 8, 8, 9, 9];
var b = [2, 4, 5, 6, 7, 8, 9];
mergeSorted(a, b);
最后两个while循环应该是if条件,因为在循环内部没有更改while循环的任何条件,所以将无限期地循环

if(b[bIndex] >= a[aIndex]) c.push(b1);
if(a[aIndex] >= b[bIndex]) c.push(a1);

调试、断点、跳过。这些内部while循环中的aIndex或bIndex不会发生任何变化。whileb[bIndex]>=a[aIndex]c.pushb1;这将循环。您可以修改c,但条件是关于a和bAlso的,您不需要parseInt,因为您将从computed length属性返回int。如果您想使用parseInt,至少要将十进制值传递给它,这样它才能正确转换:parseIntlength,10OK,谢谢大家。安德烈,我知道它在哪里坏了,但我不知道为什么。