我有一些示例代码:
var array = [];
array[0] = {id:0};
array[1] = {id:1};
array[2] = {id:2};
现在数组看起来像
[Object{id=0}, Object{id=1}, Object{id=2}]
我使用splice:
array.splice(0,1);
我们有:
[Object{id=1}, Object{id=2}]
当我尝试for
或for ... in
时,长度将只有2,我无法以正常方式迭代它。循环的结果是:
undefined
Object{id:1}
在第一种情况下(当我们使用for
时)我明白为什么它不起作用,但for ... in
应该返回索引1和2而不是0和1 ......
任何人都可以向我解释我做错了什么?
答案 0 :(得分:3)
你尝试了什么?如果我发出
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 }
(但数组索引会更改为0
和1
,这可能会让您感到困惑;请记住Array.splice
默认情况下从元素0
开始删除并转移所有内容剩下的元素向下)。
更新除了您始终可以使用id
获取单个对象的array[i].id
属性之外,您可以删除数组元素而无需使用其他元素移动delete
运算符。用{/ 1>替换array.splice(0,1)
后
delete array[0];
输出显示
0: undefined
1: Object { id=1 }
2: Object { id=2 }