我需要在Array.forEach中间插入一些东西到数组中。我想检查一下JavaScript如何处理这些情况。我期待任何事情,包括无休止的循环。但是结果对我来说很奇怪。您能解释一下发生了什么吗:
var A = [0, 1, 2, 3, 4, 5, 6, 7]
A.forEach(function(x) {
if (x == 3) A.splice(1, 0, 'new')
})
document.write(JSON.stringify(A))
通过大量中间变量的观察writeln
:
所述forEach
环外表每个在原始索引只有一次-所以它必须存储在某些临时变量数组的长度。
该splice
行在第一个元素之后的同一位置插入“ new”。
只有在第4个位置看到“ 3”后,才会发生这种情况。
因此,在第3次迭代中,第一次插入后,您的数组如下所示:
[ 0, "new", 1, 2, 3, 4, 5, 6, 7 ]
并且forEach
迭代器在元素4处-再次为“ 3”。
..因此,“ new”将插入原始数组长度的其余部分。
forEach
循环代码的编写者必须考虑到有人在后台更改数组。比较安全的方法是复制原始数组,但是我认为这需要深度复制(您可能无法事先知道更改的深度),这可能导致大量复制。复制似乎是一个极端案例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句