Javascript 如何使用部分索引值从对象中获取值
我有一个包含很多键和值的对象。我可以使用索引获得任何值。但是我没有完整的索引,我有它的一部分,我能根据索引的一部分得到值吗 例如:Javascript 如何使用部分索引值从对象中获取值,javascript,jquery,Javascript,Jquery,我有一个包含很多键和值的对象。我可以使用索引获得任何值。但是我没有完整的索引,我有它的一部分,我能根据索引的一部分得到值吗 例如: c = {'select':'MyValue',...} 我可以使用索引获取值,如下所示: c['select'] = 'MyValue' 我尝试创建此函数来搜索精确值: function search(nameKey, c){ for (var i=0; i < c.length; i++) { if (c[i].select =
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){
对于(变量i=0;i
c['select']
将返回'MyValue'
,但我需要执行类似于c['Sel']
或c['select']
或c['selected']
的操作来返回相同的'MyValue'
您可以使用Object.keys()
获取属性名数组
然后使用数组#find()
查找第一个匹配项以获取所需的密钥(如果存在)
const数据={
aaaa:1,
bbb:2,
中交:3
}
功能搜索(名称键,obj){
nameKey=nameKey.toLowerCase();//将两者规范化为小写,使其不区分大小写
常量键=对象键(obj);
const wantedKey=keys.find(key=>key.toLowerCase().includes(nameKey));
返回wantedKey?obj[wantedKey]:false;
}
log('术语“a”值:',搜索('a',数据))
console.log('术语“bb”值:',搜索('bb',数据))
console.log('Term“X”value:',search('X',data))
您可以使用Object.keys()
然后使用数组#find()
查找第一个匹配项以获取所需的密钥(如果存在)
const数据={
aaaa:1,
bbb:2,
中交:3
}
功能搜索(名称键,obj){
nameKey=nameKey.toLowerCase();//将两者规范化为小写,使其不区分大小写
常量键=对象键(obj);
const wantedKey=keys.find(key=>key.toLowerCase().includes(nameKey));
返回wantedKey?obj[wantedKey]:false;
}
log('术语“a”值:',搜索('a',数据))
console.log('术语“bb”值:',搜索('bb',数据))
console.log('Term“X”value:',search('X',data))
逻辑似乎不太清楚,它与键的匹配方式也不太相关
但这是一个功能,在您展示的特定情况下可能会有所帮助:
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;
}
}
说明:
- 首先,我们使用检查对象是否具有作为键/属性的搜索名称,我们返回它的值,这将避免循环所有键
- 否则,我们使用获取对象的关键点
- 然后,我们使用
键
数组上的方法来检查是否存在相关的键
返回它的值,否则返回false
演示:
功能搜索(名称键,obj){
if(对象hasOwnProperty(nameKey)){
返回obj[nameKey];
}否则{
var res=Object.keys(obj).filter(函数(k){
返回(k.toLowerCase().indexOf(nameKey.toLowerCase())>-1)| |(nameKey.toLowerCase().indexOf(k.toLowerCase())>-1);
});
返回res?obj[res]:false;
}
}
变量c={
“选择”:“MyValue”
};
控制台日志(搜索(“Sel”,c))代码>嗯,逻辑似乎不是很清楚,它与键的匹配方式也不太相关
但这是一个功能,在您展示的特定情况下可能会有所帮助:
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;
}
}
说明:
- 首先,我们使用检查对象是否具有作为键/属性的搜索名称,我们返回它的值,这将避免循环所有键
- 否则,我们使用获取对象的关键点
- 然后,我们使用
键
数组上的方法来检查是否存在相关的键
返回它的值,否则返回false
演示:
功能搜索(名称键,obj){
if(对象hasOwnProperty(nameKey)){
返回obj[nameKey];
}否则{
var res=Object.keys(obj).filter(函数(k){
返回(k.toLowerCase().indexOf(nameKey.toLowerCase())>-1)| |(nameKey.toLowerCase().indexOf(k.toLowerCase())>-1);
});
返回res?obj[res]:false;
}
}
变量c={
“选择”:“MyValue”
};
控制台日志(搜索(“Sel”,c))代码>这里有一行(!):
假设数组位于数据中且部分索引值位于选择器中
:
const result = Object.keys(data).filter(k => k.toLowerCase().indexOf(selector.toLowerCase()) != -1).map(k => data[k]);
上面的代码返回一个数组(因为可能有多个匹配)。如果您只需要第一个元素,只需执行result[0]
以下是一行(!):
假设数组位于数据中且部分索引值位于选择器中
:
const result = Object.keys(data).filter(k => k.toLowerCase().indexOf(selector.toLowerCase()) != -1).map(k => data[k]);
上面的代码返回一个数组(因为可能有多个匹配)。如果您只需要第一个元素,只需执行result[0]
请提供一个包含预期结果和搜索标准的元素。您需要迭代对象的属性以查找匹配的属性。可以返回多个。看到这个答案:@charlietfl我提供了更多details@SMH,那么匹配规则是什么?是这个吗?“无论大小写如何,如果搜索字符串出现在属性名称中,或者如果属性名称出现在搜索字符串中,则它是匹配的。”是的,这正是我想要的。请提供一个与预期结果和搜索标准一起的搜索结果。您需要迭代对象的属性以查找匹配的属性。可以返回多个。看到这个答案:@charlietfl我提供了更多details@SMH,那么匹配规则是什么?是这个吗?“无论大小写如何,如果搜索字符串出现在属性名称中,或者如果属性名称出现在搜索字符串中,那么它就是一个匹配项。”是的,这正是我wantOP(在注释中)要求的,如果属性名称出现在搜索字符串的任何部分,则匹配项为真。如果你加上这个,我想你已经走了