【问题标题】:check if a key exists with certain "value" exists in an object using Javascript使用Javascript检查对象中是否存在具有特定“值”的键
【发布时间】:2014-10-01 17:35:27
【问题描述】:
{ foo: [ foo1: true ],
  bar: [ bar1: true, bar2: true ],
  foobar: [ foobar1: true ] }

这是一个值为array-like-objects 的对象。我想查找一个键是否存在,其值为[ bar1: true, bar2: true ]。如果键与值关联,则返回该键。

重复一遍,我正在搜索与对象中给定值关联的键。

【问题讨论】:

  • 您不能以这种方式在数组中包含键值对,这会在 : 上引发 sintax 错误。你到底想用这个做什么?
  • 这是一个无效的数组
  • 这实际上是可能的。它们被称为“像数组一样的对象”。例如:任何函数的“参数”对象。它既不是完整的数组也不是对象

标签: javascript json object key key-value


【解决方案1】:

首先,这是正确的语法:

var map = {
  foo: { foo1: true },
  bar: { bar1: true, bar2: true },
  foobar: { foobar1: true }
};

现在使用这个函数来查找它:

function findKey(map, term) {
  var found = [];
  for(var property in map) {
    if(map.hasOwnProperty(property)) {
      for(var key in map[property]) {
        if(map[property].hasOwnProperty(key) && key === term) {
          found.push(property);
        }
      }
    }
  }
  return found;
}

例如:

var results = findKey(map, 'bar1');
console.log(results); 
// [ 'bar' ]

【讨论】:

  • 我对语法很了解。正如我之前提到的,我实际上将类数组对象作为对象中的值。无论如何感谢您的帮助。
  • 按照你的语法我试过这个function findKey(map, term) { for(var key in map) { if(map[key] == term){ console.log(key); } } }我期待foo当我打电话给findKey(map, { foo1: true })但令我惊讶的是它没有记录任何东西。你知道为什么吗?
【解决方案2】:

您可以使用Array.prototype.slice.call() 将类数组对象转换为普通数组

function findKey(obj, key) {
    for (var prop in obj) {
        var arrLikeObj = obj[prop];
        var arr = Array.prototype.slice.call(arrLikeObj);
        if (arr.indexOf(key) != -1) {
            return prop;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2021-11-25
    相关资源
    最近更新 更多