【问题标题】:Array filtering based on properties in object基于对象属性的数组过滤
【发布时间】:2018-01-17 12:36:13
【问题描述】:

好吧,我被困在这里,我会很感激我可以用一些方法来实现这一点。

我有一个问题数组:

  questions: [
    {
      question: 'lala',
      answer: 'papa',
      categories: ['Handla']

    },
    {
      question: 'xxxx',
      answer: 'yyyy',
      categories: ['Reklamation']
    }
  ]

根据类别,我希望能够在过滤时相应地列出问题。

假设我想过滤“Handla”,我应该能够循环出所有在类别数组中具有“Handla”值的问题。

映射问题数组并使用 if/else 语句返回它们会起作用,但我不确定这是最佳方式。

总结:我想遍历问题并挑选出与我想要的类别查询匹配的对象。

请求“Reklamation”时我想要的输出应该是

const desiredArray = [{
        {
          question: 'xxxx',
          answer: 'yyyy',
          categories: ['Reklamation']
        }
}]

【问题讨论】:

标签: javascript arrays json ecmascript-6


【解决方案1】:

使用Array#filter 并检查是否使用Array#includescategories 数组中找到类别(示例中为Reklamation):

const questions = [{"question":"lala","answer":"papa","categories":["Handla"]},{"question":"xxxx","answer":"yyyy","categories":["Reklamation"]}];
  
const result = questions.filter(({ categories }) => categories.includes('Reklamation'));

console.log(result);

【讨论】:

    【解决方案2】:

    试试这个

    var result = questions.filter((item) => item.categories.find((cat) => cat === 'Reklamation'))
    

    【讨论】:

      【解决方案3】:

      您可以将array#filterarray.indexOf 一起使用。

      var data = {questions: [{question: 'lala',answer: 'papa',categories: ['Handla']},{question: 'xxxx',answer: 'yyyy',categories: ['Reklamation']}]}, 
          category = 'Reklamation',
          result = data.questions.filter(({categories}) => categories.indexOf(category) > -1);
      
      console.log(result);

      【讨论】:

        【解决方案4】:

        我会创建一个可重用的函数,您可以在想要按类别搜索时调用它:

        const filterByCategory = (questions, category) => { 
         return questions.filter(q => q.categories.includes(category))
        }
        
        filterByCategory(questions, 'Reklamation');
        

        filter 接受一个回调,如果您想保留该元素,则返回 true

        有关详细信息,请参阅 filterincludes 文档

        【讨论】:

          猜你喜欢
          • 2021-03-13
          • 2018-08-17
          • 1970-01-01
          • 1970-01-01
          • 2019-10-14
          • 2013-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多