关联数组拼接不起作用

我想了解为什么在nodejs数组拼接不适用于关联数组。

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个左右的项目在数组中。

我正在考虑通过使用非数字键或定义对象来强制使用散列表,以便它像一个稀疏数组一样。

最后,我不确定是否重要…

在JavaScript中,没有像关联数组这样的东西 – 有数组(像其他语言中的普通数组)和对象(如其他语言中的关联数组)。 在你的例子中, a是一个正常的数组,但你设置了非数字键,所以正常的数组方法(如拼接)看不到它。 他们只看范围0...a.length

制造a物体将无济于事。 拼接一个对象是不可能的。 尝试只使用数字键( [1]而不是['x1'] )。

    Interesting Posts