JavaScript“关联”对象与数组

时间:2015-10-19 12:23:58

标签: javascript arrays object

目前我正在使用一个对象来模拟一个关联数组。 该对象的作用类似于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个值。

2 个答案:

答案 0 :(得分:2)

如果您需要键值关联,则需要一个对象 如果你想要一个有序列表,其中的密钥并不重要,它就是一个数组。

仅供参考,指数"之间"数组中的集合索引实际上并未被填充"与D301N N408K A809V A987G ;当您尝试访问任何对象上的不存在的属性时,您只获取undefined值:

undefined

答案 1 :(得分:0)

你在问哪个“更快或更好”。为了“更好”,存在许多可能的答案,但“更快”有更明确的答案:正如其他人指出的那样ObjectArray之间几乎没有任何速度差异。两者在原型层次结构中具有相同的根。 Array的空值不会被“填充”。

关于你的用例,瓶颈不是对象,而是你如何循环它!这实际上确实有所作为:for循环更快比任何其他循环方式。但是你有非连续数字索引的问题。

因此:只需预测一下你需要多长时间

  • for(key in object)
  • keys = Object.keys()for(var i = 0; i < keys.length; i++)

因为这两个应该是你最快的选择。