[英]how to get value from object with a partial index value javascript
我有一個包含很多鍵和值的對象。 我可以使用索引獲取任何值。 但是我沒有完整的索引,只有一部分,我能否基於一部分索引來獲取值。
例:
c = {'select':'MyValue',...}
我可以使用索引來獲取值,如下所示:
c['select'] = 'MyValue'
我試圖創建此函數來搜索確切的值:
function search(nameKey, c){
for (var i=0; i < c.length; i++) {
if (c[i].select === nameKey) {
return c[i];
}
}
}
c['select']
將返回'MyValue'
但我需要做類似c['Sel']
或c['select']
或c['Select']
或c['selected']
以返回相同的'MyValue'
您可以使用Object.keys()
獲取屬性名稱的數組。
然后使用Array#find()
找到第一個匹配項以獲取所需的密鑰(如果存在)
const data = { aaaa: 1, bbbbbbb: 2, cccc: 3 } function search(nameKey, obj) { nameKey = nameKey.toLowerCase();// normalize both to lowercase to make it case insensitive const keys = Object.keys(obj); const wantedKey = keys.find(key => key.toLowerCase().includes(nameKey)); return wantedKey ? obj[wantedKey] : false; } console.log('Term "a" value:', search('a',data)) console.log('Term "bb" value:', search('bb',data)) console.log('Term "X" value:', search('X',data))
由於搜索條件含糊不清,因此我只是在屬性名稱中的任意位置找到了任何匹配項,並且沒有超過找到的第一個匹配項
好吧,邏輯似乎不太清楚,與key
匹配方式也不很相關。
但這是一個功能,在您顯示的特定情況下可能會有所幫助:
function search(nameKey, obj) {
if (obj.hasOwnProperty(nameKey)) {
return obj[nameKey];
} else {
var res = Object.keys(obj).filter(function(k) {
return (k.toLowerCase().indexOf(nameKey.toLowerCase()) > -1) || (nameKey.toLowerCase().indexOf(k.toLowerCase()) > -1);
});
return res ? obj[res] : false;
}
}
說明:
Object#hasOwnProperty()
來檢查對象的搜索名稱是否為鍵/屬性,然后返回其值,這將避免循環所有鍵。 Object.keys()
來獲取對象的鍵。 keys
數組上使用Array#filter()
方法來檢查相關key
存在,然后返回其值,否則返回false
。 演示:
function search(nameKey, obj) { if (obj.hasOwnProperty(nameKey)) { return obj[nameKey]; } else { var res = Object.keys(obj).filter(function(k) { return (k.toLowerCase().indexOf(nameKey.toLowerCase()) > -1) || (nameKey.toLowerCase().indexOf(k.toLowerCase()) > -1); }); return res ? obj[res] : false; } } var c = { 'select': 'MyValue' }; console.log(search("Sel", c));
這是一個班輪(!):
假設數組在data
,部分索引值在selector
:
const result = Object.keys(data).filter(k => k.toLowerCase().indexOf(selector.toLowerCase()) != -1).map(k => data[k]);
上面的代碼返回一個數組(因為可能有多個匹配項)。 如果只需要第一個元素,則執行result[0]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.