我有一个包含很多键和值的对象。我可以使用索引获得任何值。但是我没有完整的索引,我有一部分,我是否能够根据索引的一部分获取值。
示例:
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'
最佳答案
嗯,逻辑似乎不是很清楚,并且与如何匹配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()
获取对象的键。 - 然后我们使用
Array#filter()
方法通过keys
数组检查是否存在相关的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));
关于javascript - 如何从具有部分索引值的对象获取值javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47422766/