从数组中删除对象 - 两种不同的方法,在查询每个数组的长度时有两种不同的结果

时间:2015-12-19 00:00:40

标签: javascript arrays

我有两个相同的数组:itemsOutput& itemsOutput2

我想用attributes.type = "DIMENSION"删除数组中的那些对象。我找到了两种不同的方法:

方法1

jQuery.each(itemsOutput, function(i, val) {
    if(val.attributes.type == "DIMENSION") // delete index
      {
        delete itemsOutput[i];
      }
});
console.log(itemsOutput.length);

方法2

metrics = itemsOutput2.filter(function (el) {
            return el.attributes.type === "METRIC";
          });
console.log(metrics.length);

虽然两个新数组似乎具有相同数量的对象(并且两者都有,但所有带有attributes.type =“DIMENSION”的对象都消失了),控制台显示两个完全不同的值,每个数组的长度。

方法1删除了对象,但长度与原始数组相同(尽管在控制台中探索数组,我发现对象保留了原始索引)

方法2不仅会删除对象,还会连续重新生成索引。对我来说,代码似乎更清晰,所以我会继续使用这种方法。

然而,我的问题是,为什么会发生这种情况,如果我在循环中使用方法1的结果可能会出现问题,例如。

1 个答案:

答案 0 :(得分:6)

删除数组元素时,the array length is not affected。即使您删除数组的最后一个元素,这也成立。当delete运算符删除数组元素时,该元素不再在数组中,但长度保持不变。

如果要将其从阵列中删除,则需要使用方法splice。例如:

itemsOutput.splice(i, 1);