Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用部分索引值从对象中获取值_Javascript_Jquery - Fatal编程技术网

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(在注释中)要求的,如果属性名称出现在搜索字符串的任何部分,则匹配项为真。如果你加上这个,我想你已经走了