1

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

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

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

4

1 回答 1

1

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

制作a一个对象不会有帮助;无法拼接对象。尝试仅使用数字键([1]而不是['x1'])。

于 2014-02-20T01:27:04.210 回答