我试图理解为什么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
拼接数组什么也没做......
浏览器中的结果相同......
当数组定义为:
时,Splice按预期工作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个项目。
我正在考虑通过使用非数字键或定义为对象{}
来强制使用哈希表,以使其像稀疏数组一样工作。
最后,我不确定这是否重要......
答案 0 :(得分:1)
在JavaScript中没有关联数组这样的东西 - 有数组(比如其他语言中的普通数组)和对象(比如其他语言中的assoc。数组)。在您的示例中,a
是一个普通数组,但您在其上设置了非数字键,因此正常的数组方法(如splice)看不到它。它们只在0...a.length
范围内查看。
使a
成为对象无济于事;拼接对象是不可能的。请尝试仅使用数字键([1]
代替['x1']
)。