我在删除数组中的对象时偶然发现了这一点。
以下是代码:
friends = [];
friends.push(
{
a: 'Nexus',
b: 'Muffin'
},
{
a: 'Turkey',
b: 'MonkMyster'
}
)
console.log(friends);
for(i in friends){
if(friends[i].a == 'Nexus'){
delete friends[i];
friends.push({
a: 'test',
b: 'data'
});
}
}
console.log(friends);
它也发布在jsfiddle上。
基本上,为什么我console.log
的{{1}}输出的第一个friends
:
[Object, Object]
但是,当在循环中删除该对象然后向该数组添加新对象时,它会记录:
[1: Object, 2: Object]
1:, 2:
究竟是什么意思(显然要为每个对象关联),但我想知道为什么在第一次记录friends
之后它不存在?我的朋友阵列中的对象符号是错误的吗?我觉得我创建的初始friends
数组错了,JavaScript解析器正在纠正我?
答案 0 :(得分:6)
因为您删除了第一个项目(没有重新索引)并推送了一个新项目。
最初,你有一个数组,其对象位于第0位,另一个位于第一位。
更改后,你有一个数组,其中一个对象位于第一个位置,另一个位于第二个位置。
因此,控制台只想显示第一个条目位于第1个位置而不是第0个位置。
每个控制台可能会以不同的方式执行此操作,例如在我获得的Firefox上
Array [ <1 empty slot>, Object, Object ]
控制台只是一个调试工具,您可以忽略这些语法。你没有做错任何事。
然而,使用稀疏数组可能有点奇怪。您可以考虑重新索引数组,而不是仅删除属性:
delete array[position]; // Just remove
array.splice(position, 1); // Remove and reindex