我正在尝试创建一个函数,该函数接受一个数组,并以奇数之前的偶数返回该数组。我以为我要遍历数组,并用模来检查每个数字的可除性。如果它是偶数,则将该数字移到数组的开头并继续。
我已删除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;
};
发生最大堆栈错误。
答案 0 :(得分:5)
因为unshift
将元素添加到数组,从而增加了其length
。此外,一旦unshift
向数组的开头添加了元素,下一个A[x]
就与前一个元素相同,因为所有元素都向右移动,包括x
。因此循环永远不会结束,因为索引x
永远不会到达不断增加的length
。
如果您需要向循环中迭代的数组中添加元素,最好在push
到length
递减的循环中使用0
。这样,循环将永远不会遍历添加的元素,并且它将遍历的元素不会移动。
答案 1 :(得分:0)