【问题标题】:How to properly list items from array after splice拼接后如何正确列出数组中的项目
【发布时间】:2011-06-02 10:51:57
【问题描述】:

我有一些示例代码:

var array = [];
array[0] = {id:0};
array[1] = {id:1};
array[2] = {id:2};

现在数组看起来像

[Object{id=0}, Object{id=1}, Object{id=2}] 

我使用拼接:

array.splice(0,1);

我们有:

[Object{id=1}, Object{id=2}]

当我尝试 forfor ... in 时,长度将仅为 2,我无法以正常方式对其进行迭代。循环的结果是:

undefined
Object{id:1}  

在第一种情况下(当我们使用 for 时)我理解它为什么不起作用,但 for ... in 应该返回索引 1 和 2 而不是 0 和 1...

谁能解释我做错了什么?

【问题讨论】:

  • 当然可以。只需从 0 迭代到 array.length(即 1)...for (var i = 0; i < array.length; i++) { ...
  • 您发布的代码很好(请参阅我的代码工作示例:jsfiddle.net/PNeRk)。你能发布你的循环代码吗?

标签: javascript arrays for-loop


【解决方案1】:

你尝试了什么?如果我发出

var array = [];
array[0] = {id:0};
array[1] = {id:1};
array[2] = {id:2};
array.splice(0,1);
for (var i = 0, len = array.length; i < len; i++)
    console.log(i + ":", array[i]);

引擎正确输出

0: Object { id=1 }
1: Object { id=2 }

(但数组索引更改为01,这可能会让您感到困惑;请记住Array.splice 默认情况下会从元素0 向前删除,并将所有剩余元素向下移动)。

更新:除了您始终可以使用array[i].id 获取单个对象的id 属性之外,您还可以使用delete 删除数组元素而不移动其他元素操作员。在我用

替换array.splice(0,1)之后
delete array[0];

输出显示

0: undefined
1: Object { id=1 }
2: Object { id=2 }

【讨论】:

  • 没错!但问题是我不想要递减索引,因为在某些情况下我必须参考它。我应该使用删除还是什么?
猜你喜欢
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 2012-07-16
  • 1970-01-01
  • 2017-06-10
  • 2021-11-20
  • 1970-01-01
相关资源
最近更新 更多