用数组过滤对象

das*_*kel -1 javascript arrays filtering find javascript-objects

有很多关于过滤对象数组的问题,但我无法以另一种方式进行;一个内部有数组的对象。

所需的输出是一个带有结果的数组。在这种情况下,他的爱好列表中包含“瑜伽”的人的名字是约翰。

这是示例:

function findHobbyists(hobbies, hobby) {
  return [];
}

var hobbies = {
  "John": ['Piano', 'Puzzles', 'Yoga'],
  "Adam": ['Drama', 'Fashion', 'Pets'],
  "Mary": ['Magic', 'Pets', 'Reading']
};

console.log(findHobbyists(hobbies, 'Yoga'));
Run Code Online (Sandbox Code Playgroud)

免责声明,这是测试的一部分,我正在寻找解决此问题的正确方法以供将来参考。

这是我迄今为止尝试过的。我知道这是错误的;

function findHobbyists(hobbies, hobby) {
  var res = []
  for (var key in hobbies) {
    if (hobbies.hasOwnProperty(key)) {
      if (hobbies[key].filter(item => item == hobby)) {
        res.push(hobbies[key])
      }
    }
  }
  return res;
}

var hobbies = {
  "John": ['Piano', 'Puzzles', 'Yoga'],
  "Adam": ['Drama', 'Fashion', 'Pets'],
  "Mary": ['Magic', 'Pets', 'Reading']
};

console.log(findHobbyists(hobbies, 'Yoga'));
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 5

您可以获取密钥并对其进行过滤。

function findHobbyists(hobbies, hobby) {
    return Object.keys(hobbies).filter(k => hobbies[k].includes(hobby));
}

var hobbies = { John: ['Piano', 'Puzzles', 'Yoga'], Adam: ['Drama', 'Fashion', 'Pets'], Mary: ['Magic', 'Pets', 'Reading'] };

console.log(findHobbyists(hobbies, 'Yoga'));
Run Code Online (Sandbox Code Playgroud)