[英]efficient way to search an associative, multi-dimensional array (object) using JavaScript and/or jQuery for key based on value
我有一個看起來像這樣的對象:
var arr = {};
arr.planes = { prop1 : 'a', prop2 : 'b', prop3 : 'c' };
arr.trains = { prop1 : 'x', prop2 : 'y', prop3 : 'z' };
arr.autos = { prop1 : 'red', prop2 : 'orange', prop3 : 'blue' };
我正在嘗試編寫一個函數(快速而有效),它將返回基於嵌套在其中的鍵/值對的最外層數組的鍵(或鍵數組,如果有多於1個)。 就像是:
function getKey(obj, prop, val) {
// do some stuff...
return key;
}
var myKey = getKey(arr, 'prop2', 'orange');
myKey的值應該是“autos”。
我很確定這可以通過幾個嵌套的for循環完成,但是這些數組相當大,我在想,特別是使用jquery的grep(),必須有更好的方法......或者可能不是 - 我此刻難倒。
任何見解都將非常感謝!!
除了更改像chris這樣的數據結構外,這幾乎是你唯一的選擇:
function getKey(obj, prop, val) {
var keys = [];
for (var key in obj) {
if (obj[key].hasOwnProperty(prop) && obj[key][prop] === val) {
keys.push(key);
}
}
return keys;
}
嵌套循環不是必需的,你只需要遍歷每個數組元素..在我看來非常有效。
您可能會驚訝於for循環在現代瀏覽器中對陣列執行的速度有多快。
但是,您也可以為此維護不同的數據結構。
只需使用一些循環來構建一個像這樣結構化的新對象
var map = {
prop1: {a: ["planes"], x: ["trains"], red: ["autos"]}
, prop2: {...}
};
function getKey(prop, val) {
return map[prop][val] || [];
}
從那時起,查找速度非常快。
我假設值是標量,否則這不會起作用,因為只有標量可以用作屬性名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.