我正在尝试创建一个函数,它接受一个数组并返回偶数在奇数之前的数组。我想我应该遍历数组并用模检查每个数字的整除性。如果它是偶数,我会将该数字移到数组的前面并继续。
我已经删除了 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(使用前将#替换为@)