我不知道这是不是一个愚蠢的问题,但它来了:
想象一下无序对象的数组,如:
[{id:4, name:"a"},{id:2, name:"b"},{id:3, name:"ee"},{id:1, name:"fe"},.....]
。
使用javascript在循环内部创建这个数组,但是,每当我向数组推送内容时,我必须检查是否存在具有相同id
的对象并且只推送新内容。
哪一个更快:
1)在每个循环中检查整个数组。
或
2)仅使用ids
创建临时一维数组,并使用indexOf
检查新对象id
是否存在,然后,如果临时数组不存在,则添加它到原始阵列。
答案 0 :(得分:1)
怎么样
var a = []
var o = { id:10, name:"xyz" }
if(typeof a[o.id]=="undefined") {
a[o.id] = { name:o.name }
}
?对大多数机器来说,这应该是最快的或者不改变你的对象结构
a[o.id] = { id:o.id, name:o.name }
但更好的方法是
function getA(i) { if (typeof a[i] == "undefined") return null;
return { id:i, name:a[i].name }; }