简而言之:数组通常比对象更快。但没有100%正确的解决方案。
2017 年更新 - 测试和结果
var a1 = [{id: 29938, name: 'name1'}, {id: 32994, name: 'name1'}];
var a2 = [];
a2[29938] = {id: 29938, name: 'name1'};
a2[32994] = {id: 32994, name: 'name1'};
var o = {};
o['29938'] = {id: 29938, name: 'name1'};
o['32994'] = {id: 32994, name: 'name1'};
for (var f = 0; f < 2000; f++) {
var newNo = Math.floor(Math.random()*60000+10000);
if (!o[newNo.toString()]) o[newNo.toString()] = {id: newNo, name: 'test'};
if (!a2[newNo]) a2[newNo] = {id: newNo, name: 'test' };
a1.push({id: newNo, name: 'test'});
}
原帖 - 解释
你的问题中存在一些误解。
JavaScript 中没有关联数组。仅数组和对象。
这些是数组:
var a1 = [1, 2, 3];
var a2 = ["a", "b", "c"];
var a3 = [];
a3[0] = "a";
a3[1] = "b";
a3[2] = "c";
这也是一个数组:
var a3 = [];
a3[29938] = "a";
a3[32994] = "b";
它基本上是一个有洞的数组,因为每个数组都有连续索引。它比无孔阵列慢。但手动迭代数组甚至更慢(大部分)。
这是一个对象:
var a3 = {};
a3[29938] = "a";
a3[32994] = "b";
这是三种可能性的性能测试:
查找数组 vs 空洞数组 vs 对象性能测试 http://jsben.ch/Y9jDP
Smashing 杂志上有关这些主题的精彩读物:编写快速内存高效的 JavaScript http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/