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

时间:2015-12-02 16:57:17

标签: javascript foreach iteration

这个输出有什么意义?也许我在考虑它是错的,但它似乎是相当描述的,它应该是什么东西

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的对象。

1 个答案:

答案 0 :(得分:2)

因此,您希望从具有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);
}

DEMO