所以这里有两个小提琴:
当在循环中使用forEach然后数组移位时,输出会产生重复,但如果我使用常规for循环并使用移位返回作为输出它可以正常工作。
所以两者之间的唯一区别是:
this.fs
与:相比:
var queueSize = testArray.length;
if (queueSize > 0) {
testArray.forEach(function (loopData) {
jQuery('.js-target').append(loopData+'<br>');
testArray.shift();
});
}
对我而言,第一个应该和第二个一样有效。 (数据通过push添加到testArray,即添加到数组的末尾)。这是我用移位功能不理解的东西吗?
答案 0 :(得分:1)
shift方法将删除数组开头的元素。因此,第二个示例中的数组在每次迭代时都会缩短。
shift方法删除零点索引处的元素并移位 连续索引处的值下降,然后返回已删除的值 值。如果length属性为0,则返回undefined。
有关完整概述,请参阅the MDN docs。
答案 1 :(得分:0)
如果在forEach循环期间更改数组的元素(而不是它们的值),它将与常规for循环的行为不同。
forEach()处理的元素范围在第一个之前设置 调用回调。之后附加到数组的元素 回调不会访问对forEach()开始的调用。如果 更改数组的现有元素的值,传递值 回调将是forEach()访问它们时的值; 访问之前删除的元素不会被访问。
答案 2 :(得分:0)
您可能想在MDN中阅读此explanation,真的很棒
下面的示例记录“一个”,“两个”,“四个”。当到达包含值“两个”的条目时,整个数组的第一个条目将移开,这将导致所有其余条目向上移动一个位置。 由于元素“四个”现在位于数组中的较早位置,因此将跳过“三个”。 forEach()在迭代之前不会复制数组。
var words = ['one', 'two', 'three', 'four'];
words.forEach(function(word) {
console.log(word);
if (word === 'two') {
words.shift();
}
});
// one
// two
// four