javascript forEach循环可能有奇怪的输出

Possible strange output of javascript forEach loop

本文关键字:输出 可能有 forEach 循环 javascript      更新时间:2023-09-26

这个输出有什么意义?也许我想错了,但它似乎相当描述性,应该是东

var dataset = [1, 2, 3];
dataset.forEach(function(element, index, array) {
    //          (index, how many to remove)
    array.splice(0, 0);
});
returns [1,2,3] as expected

dataset.forEach(function(element, index, array) {
    array.splice(0, 3);
});
returns [] as expected

dataset.forEach(function(element, index, array) {
   array.splice(0, 1);
});
returns [3]

dataset.forEach(function(element, index, array) {
    array.splice(0, 2);
});
returns [3]

这让我质疑我对一切的理解,哈哈。我有一个更复杂的要求,一组对象可能具有属性"element.archived"

var dataset = [Object, Object, Object]
dataset.forEach(function(element, index, array) {
   if (element.archived) array.splice(index, 1);
});

我正在尝试对数组进行迭代,并删除所有属性值为true的对象。

因此,您希望从具有archived: true的数组中删除对象。以下是几种方法:

您可以使用filter返回新的过滤数组:

var arr = dataset.filter(function (el) {
  return el.archived !== true;
});

或者,您可以使用splice在迭代元素时删除它们:

for (var i = dataset.length - 1; i >= 0; i--) {
  if (dataset[i].archived === true) dataset.splice(i, 1);
}

演示