沒有引入另一個數據結構,沒有更好的方法(效率更高)。答案真的取決於你的使用,但你可以做一些不同的事情:
使用哈希創建單獨的'索引'。這些結構會將鍵映射到源數組中的項目或索引。 JavaScript對象/散列支持基於鍵的查找,應該是有效的。
userinfo[x].username = "foo";
// Index the objects
usersByName = {};
usersByName["foo"] = userinfo[x];
// -- OR -- index the array indices
var usersByName["foo"] = x;
// Test for key
"foo" in usersByName; // true
你必須投入更多一點的工作,以維持指數和源陣列之間的一致性。將兩者都包裝在另一個對象中來管理兩者的內容可能是最好的。如果有多個字段需要查看對象,這種方法很好。
如果你不關心集合的命令,你可以只改變了整個事情的哈希和指數用戶名
var userinfo = {};
userinfo["foo"] = {username: "foo", firstName: "Foo", lastName: "Bar"};
一件事想的,雖然是如果效率提高將超過維護索引所增加的代碼複雜度。如果您沒有進行大量搜索,並且userinfo集合中沒有大量的項目,那麼只需編寫一個通用搜索函數或使用Philip Schweiger提到的庫這樣做會更有意義。
function findObjectByAttribute (items, attribute, value) {
for (var i = 0; i < items.length; i++) {
if (items[i][attribute] === value) {
return items[i];
}
}
return null;
}
var userinfo = [];
userinfo[0] = {username: "foo"};
console.log(findObjectByAttribute(userinfo, "username", "foo"));
這是行不通的。 matchFound的值經常被覆蓋。 – awm
另外,''是什麼意思? true:false'部分? 'userInfo [i] .username ==「foo」'已經評估爲true或false。 – awm
從技術上說,你可以通過裏面有'Objects'的'Array'循環。沒有太多的方法可以做到這一點。 @awm,我假設他向我們展示了僞代碼。 – c69