关联数组拼接不起作用
我想了解为什么在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']
)。