javascript - 如果在对象中找到值,则返回键

标签 javascript arrays json

有一个像这样的对象:

var animals = { "dog": ["black", "red", "green"],
                 "cat": ["pink", "red", "white"],
                 "bird": ["green", "grey", "yellow"]};

我想取回具有特定颜色的动物的名称,例如 "red" 我想返回一个包含 ["dog", "cat"的数组]; 尝试这样做,但我只返回 Array(0) 或 Array(1)

function findColor(animals, color) {

  var result = [];
  if (Object.values(animals).indexOf(color) > -1) {
    result.push(color);
  }

  return result;
}

console.log(findColor(animals, "red"));

最佳答案

您可以简单地使用 Object.keysfilter

var animals = {
  "dog": ["black", "red", "green"],
  "cat": ["pink", "red", "white"],
  "bird": ["green", "grey", "yellow"]
};

function findColor(animals, color) {
  return Object.keys(animals).filter(key=>animals[key].includes(color))
}

console.log(findColor(animals, 'red'));


Why my code is not working ?

indexOf 使用严格比较,Object.values(animals) 返回一个二维数组,而您正试图将它与字符串值匹配,您需要做的是遍历键并在二维数组的子数组上使用 indexOf

var animals = {"dog": ["black", "red", "green"],"cat": ["pink", "red", "white"],"bird": ["green", "grey", "yellow"]};

function findColor(animals, color) {
  var result = [];
  Object.keys(animals).forEach(v => {
    if (animals[v].indexOf(color) > -1) {
      result.push(v)
    }
  })
  return result;
}

console.log(findColor(animals, "red"));

关于javascript - 如果在对象中找到值,则返回键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58649182/

相关文章:

javascript - $.getJSON 无法识别 JSON

javascript - 无法以 Angular 加载新的模块依赖项

javascript - Javascript 中的 Promise {pending}、async、await

javascript - 如何从数组中多次随机选择一个对象并将每个对象存储在数组中?

javascript数组为空且未定义

javascript - d3.js 强制可折叠图 - 输入数据是对象数组

javascript - 本地文本文件中的 jquery 自动完成功能未获取

JavaScript 构造函数参数类型

c - 如何将 2 个数组合并为一个数组

php - JSON POST 请求 - Pocket API/OAuth2.0