2017-05-13 20 views
2

說我有一個object稱爲「組」的關鍵,它有鍵,其值是數組:檢查如果一個字符串屬於一個數組類型的值對象中的

let groups = { 
    group1: ['A', 'B', 'C'], 
    group2: ['X', 'Y', 'Z'] 
}; 
let item = 'B'; 

我怎麼會去關於發現item其實在group1? (注意:會有很多組,我知道我可以使用for循環遍歷對象中的每個鍵,但會有更快的方式嗎?)

+1

所以,你要創建各種各樣的函數返回具有包含想要的項目值的鑰匙?你可以得到所有的密鑰並過濾它們:'Object.keys(groups).filter(key => groups [key] .includes(item));'。 – Li357

+1

如果可以接受的值是Sets而不是數組,那會大大加快搜索時間。我會說沒有某種預先排序,你至少需要迭代每個組。 – Carcigenicate

+0

我會試試這兩個,謝謝。 – Wright

回答

1

您可以使用一個Map爲參考組的鑰匙。

let groups = { group1: ['A', 'B', 'C'], group2: ['X', 'Y', 'Z'] }, 
 
    map = new Map, 
 
    item = 'B'; 
 

 
Object.keys(groups).forEach(k => groups[k].forEach(v => map.set(v, k))); 
 

 
console.log(map.get(item));

ES5

var groups = { group1: ['A', 'B', 'C'], group2: ['X', 'Y', 'Z'] }, 
 
    hash = Object.create(null), 
 
    item = 'B'; 
 

 
Object.keys(groups).forEach(function (k) { 
 
    groups[k].forEach(function (v) { 
 
     hash[v] = k; 
 
    }); 
 
}); 
 

 
console.log(hash[item]);

+0

更好地使用你的第一選擇,'for循環',因爲這不是更好。沒有其他方法,但是要循環使用對象屬性。 – skobaljic

相關問題