如何从具有部分索引值javascript的对象获取值

时间:2017-11-21 21:08:44

标签: javascript jquery

我有一个包含很多键和值的对象。我可以使用索引获得任何值。但我没有完整的索引,我有一部分,我能否根据索引的一部分得到值。

示例:

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}}

3 个答案:

答案 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

<强>演示:

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:1)

这是一个班轮(!):

假设您的数组位于data且部分索引值位于selector中:

const result = Object.keys(data).filter(k => k.toLowerCase().indexOf(selector.toLowerCase()) != -1).map(k => data[k]);

上面的代码返回一个数组(因为,可能有多个匹配)。如果您只需要第一个元素,只需执行result[0]