关联阵列拼接不起作用

时间:2014-02-20 01:21:00

标签: javascript node.js array-splice

我试图理解为什么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个项目。

我正在考虑通过使用非数字键或定义为对象{}来强制使用哈希表,以使其像稀疏数组一样工作。

最后,我不确定这是否重要......

1 个答案:

答案 0 :(得分:1)

在JavaScript中没有关联数组这样的东西 - 有数组(比如其他语言中的普通数组)和对象(比如其他语言中的assoc。数组)。在您的示例中,a是一个普通数组,但您在其上设置了非数字键,因此正常的数组方法(如splice)看不到它。它们只在0...a.length范围内查看。

使a成为对象无济于事;拼接对象是不可能的。请尝试仅使用数字键([1]代替['x1'])。