Javascript:Unshift() 导致无限循环,但不明白为什么

2023-12-31

我正在尝试创建一个函数,它接受一个数组并返回偶数在奇数之前的数组。我想我应该遍历数组并用模检查每个数字的整除性。如果它是偶数,我会将该数字移到数组的前面并继续。

我已经删除了 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;
};

发生最大堆栈错误。


Because unshift向数组添加一个元素,从而增加其值length。此外,一旦unshift将一个元素添加到数组的开头,下一个A[x]与上一个相同,因为所有元素都移到右侧,包括x。所以循环永远不会结束,因为索引x永远不会达到不断增加的程度length.

如果您需要将元素添加到正在循环迭代的数组中,最好使用push在一个循环中,从length to 0。这样,循环将永远不会迭代添加的元素,并且它将迭代的元素也不会移动。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript:Unshift() 导致无限循环,但不明白为什么 的相关文章

随机推荐