【发布时间】:2014-03-20 17:01:00
【问题描述】:
我试图理解为什么在 nodejs 数组 splice 中不能在关联数组上工作。
var a = [];
a['x1'] = 234234;
a['x2'] = 565464;
console.log("Init-------");
showIt();
a.splice(0, 1);
console.log("After splice-------");
showIt();
delete a['x1'];
console.log("After delete-------");
showIt();
function showIt(){
var keys = Object.keys(a);
var len = keys.length;
var i=0;
while (i < len) {
console.log( ' ' + i + ' ------------ ' + keys[i] );
i++;
}
}
结果:
Init-------
0 ------------ x1
1 ------------ x2
After splice-------
0 ------------ x1
1 ------------ x2
After delete-------
0 ------------ x2
拼接数组什么都不做……
在浏览器中的结果相同...
更新:
当数组定义为:
var a = ['x1','x2','x3'];
console.log("Init-------");
console.log(a);
a.splice('x1', 1);
console.log("After splice-------");
console.log(a);
看起来在第一个示例中,该数组被视为在第二个示例中被定义为对象{},它被视为更像一个数组。
致版主:
这并不是一个关于备用阵列的问题,它更多的是一个从 0 开始并在几天内按顺序增长到 1000 万个的阵列的问题。随着数组的增长,数组被删除,因此一次数组中有大约 1000 个项目。
我正在考虑通过使用非数字键或定义为对象{} 来强制使用哈希表,以便它像稀疏数组一样工作。
最后,我不确定这是否重要......
【问题讨论】:
-
splice适用于arrays或array-like对象,在第一个示例中,它完全符合预期as per spec 在第二个示例中,您是delet从一个对象(数组仍然是一个对象) -
我开始看到了。你看到稀疏数组的问题了吗?
-
个人没有,但是为什么你的数组是稀疏的,你是如何创建它们的?
-
当然,使用带有属性的真正
Object并使用delete删除它们也没有错。 -
感谢您的帮助,我想我要把它们设为 var connections={} 的对象,然后使用 delete。
标签: javascript node.js array-splice