我有一个包含很多键和值的对象。我可以使用索引获得任何值。但我没有完整的索引,我有一部分,我能否根据索引的一部分得到值。
示例:
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'
{1}}
答案 0 :(得分:1)
您可以使用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))
由于搜索条件含糊不清,我只是在属性名称的任何位置找到任何匹配项,并且没有找到第一个找到的匹配项
答案 1 :(得分:1)
逻辑似乎并不十分明确,与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));
&#13;
答案 2 :(得分:1)
这是一个班轮(!):
假设您的数组位于data
且部分索引值位于selector
中:
const result = Object.keys(data).filter(k => k.toLowerCase().indexOf(selector.toLowerCase()) != -1).map(k => data[k]);
上面的代码返回一个数组(因为,可能有多个匹配)。如果您只需要第一个元素,只需执行result[0]
。