基于对象属性的数组过滤

时间:2018-01-17 12:36:14

标签: javascript arrays json ecmascript-6

好吧,我被困在这里,我很感激我可以用这些方法完成的方法。

我有一个问题的数组:

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

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

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

所以我想说我想过滤'Handla'我应该能够循环出所有在类别数组中匹配'Handla'值的问题。

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

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

请求“重新启动”时我想要的输出应该是

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

4 个答案:

答案 0 :(得分:3)

使用Array#filter并使用Array#includes检查Reklamation数组中是否找到了类别(示例中的categories):

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

答案 1 :(得分:1)

试试这个

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

答案 2 :(得分:1)

您可以将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);

答案 3 :(得分:1)

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

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

filterByCategory(questions, 'Reklamation');
如果你想保留元素,

filter会收到一个返回true的回调。

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