当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《从数组中删除对象-两种不同的方法,在查询每个数组的长度时有两种不同的结果》经验,为你挑选了1个好方法。

我有两个相同的数组: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> Amir..:

删除数组元素时,数组长度不受影响.即使您删除数组的最后一个元素,这也成立.当delete运算符删除数组元素时,该元素不再在数组中,但长度保持不变.

如果要将其从数组中删除,则需要使用方法拼接.例如:

itemsOutput.splice(i, 1);


该数组不会在该索引处包含未定义的值.它将变得稀疏,即在该指数处"有一个洞".是的,尝试读取该索引处的值将返回undefined,但不是因为该数组在该位置包含undefined,而只是因为该位置没有任何内容.但阵列仍保持相同的长度.欢迎来到Javascript数组的荒谬世界!
推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有