目前我正在使用一个对象来模拟一个关联数组。 该对象的作用类似于mysql中的一对多关系表 例如:
var obj = {
105: [],
200: []
//...
}
我的属性名称只是数字,所以我发现我也可以使用数组。
但是,索引之间的空条目用undefined
填充。
var arr = [];
arr[10] = "Value";
arr[15] = "Value 2";
//arr => [undefined*10, "Value", undefined*4, "Value 2"]
因此,当我要迭代该数组时,我必须检查当前索引的值是否已设置。
所以问题是,哪种解决方案更快或更好。
使用对象或数组在哪里
indizes之间的空白空间填充undefined
个值。
答案 0 :(得分:2)
如果您需要键值关联,则需要一个对象 如果你想要一个有序列表,其中的密钥并不重要,它就是一个数组。
仅供参考,指数"之间"数组中的集合索引实际上并未被填充"与D301N
N408K
A809V
A987G
;当您尝试访问任何对象上的不存在的属性时,您只获取undefined
值:
undefined
答案 1 :(得分:0)
你在问哪个“更快或更好”。为了“更好”,存在许多可能的答案,但“更快”有更明确的答案:正如其他人指出的那样Object
和Array
之间几乎没有任何速度差异。两者在原型层次结构中具有相同的根。 Array
的空值不会被“填充”。
关于你的用例,瓶颈不是对象,而是你如何循环它!这实际上确实有所作为:for
循环更快比任何其他循环方式。但是你有非连续数字索引的问题。
因此:只需预测一下你需要多长时间
for(key in object)
keys = Object.keys()
和for(var i = 0; i < keys.length; i++)
因为这两个应该是你最快的选择。