【问题标题】:Filter an object with arrays用数组过滤对象
【发布时间】:2023-04-10 02:12:02
【问题描述】:

有很多关于过滤对象数组的问题,但我在用另一种方式时遇到了麻烦;一个里面有数组的对象。

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

示例如下:

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

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

console.log(findHobbyists(hobbies, 'Yoga'));

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

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

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'));

【问题讨论】:

  • 感谢@RicardoGonzalez 的输入我的印象是,如果您在解决问题时遇到困难,您可以提出问题。由于该站点的标题是“Stack Overflow - 开发人员在此 学习、分享和建立职业”。我尝试了几种不同的方法,但它们都离我太远了,我不想用它污染我的问题。但是看到我因为提出一个试图学习的问题而被否决,我承认我这样做是错误的。我已将我的尝试添加到问题中,希望没问题。
  • 对不起@Dennis,我不是故意粗鲁的,但是如果我们阅读代码更容易理解问题,如果我们遵循一些标准化的规则来提高工作效率会更容易.

标签: javascript arrays find filtering javascript-objects


【解决方案1】:

如果你想要数组中的人名

function findHobbyists(hobbies, hobby) {
  var arr = [];
  for (let val in hobbies) {
    hobbies[val].includes(hobby) ? arr.push(val) : null;
  }
  return arr;
}

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

console.log(findHobbyists(hobbies, 'Yoga'));

【讨论】:

    【解决方案2】:

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

    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'));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-02
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      相关资源
      最近更新 更多