Javascript:Unshift()导致无限循环,但无法理解原因

Ray*_*pie 2 javascript

我正在尝试创建一个带有数组的函数,并返回奇数前带偶数的数组.我想我会遍历数组并用模数检查每个数字的可分性.如果它是偶数,我将该数字移到阵列的前面并继续.

我已经删除了unshift来记录它迭代通过所以我知道问题不在于我的循环.

/// A = [3,5,6,3,4,2,1]

var sortArrayByParity = function(A) {
    for (var x =0; x< A.length;x++) {
        if (A[x] % 2 == 0) {
           A.unshift(A[x])
        } 
    }
    return A;
};
Run Code Online (Sandbox Code Playgroud)

发生最大堆栈错误.

Kre*_*mir 5

因为unshift向数组添加了一个元素,从而增加了它length.此外,一旦unshift将元素添加到数组的开头,则下A[x]一个元素与前一个元素相同,因为所有元素都向右移动,包括x.所以循环永远不会完成,因为索引x永远不会增加length.

如果您需要添加元素的数组,通过它你是一个迭代循环,这是更好地做push一个循环,从向下计数length0.这样,循环将永远不会遍历添加的元素,并且它将迭代的元素将不会移动.