javascript - 过滤对象数组,其中对象中的一个字段是数组

标签 javascript arrays angular typescript

 data:[
        {
           id:1,
           tags:['TagA','TagB','TagC']
         },
         {
           id:2,
           tags:['TagB','TagD']
         },
         {
            id:3,
            tags:['tagE','tagC']
         }
      ]

filterCondition:{tags:['TagA','TagB']}

Expected Output: [
                   {
                     id:1,
                     tags:['TagA','TagB','TagC']
                   },
                   {
                     id:2,
                     tags:['TagB','TagD']
                   }
                 ]

是否有可能使用过滤器方法在 typescript 中实现这一点? 当 tags 字段不是数组时,但当它在数组中时,这是可能的 代码中断。

我试过了,但失败了:

   data.filter(o => Object.keys(filterCondition).every(k => filterCondition[k].some(f => o[k] === f)));

最佳答案

您可以使用filterincludes

const data = [{id:1,tags:['TagA','TagB','TagC']},{id:2,tags:['TagB','TagD']},{id:3,tags:['tagE','tagC']}];
      
const filterData = tag => data.filter(d => tag.some(t => d.tags.includes(t)));

console.log(filterData(['TagA', 'TagB']));

以提到的 conditionArray 形式进行少量编辑:

    let filterArray={tags:['TagA','TagB']}

    const data = [{id:1,tags:['TagA','TagB','TagC']},{id:2,tags:['TagB','TagD']},{id:3,tags:['tagE','tagC']}];

    output= data.filter(o => Object.keys(filterArray).every(d => filterArray[d].some(t => o[d].includes(t))));

关于javascript - 过滤对象数组,其中对象中的一个字段是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53815361/

相关文章:

angular - 如何创建原理图任务?

javascript - HTML5 日期验证

javascript - 如何关闭带有链接或按钮等的html页面?

java - 对象存储容量 数组列表

javascript - Jquery 通过多个属性和值过滤数组

javascript - IE11 中的 Object.assign() 和 Angular2

javascript - d3 如何每行渲染 15 个圆圈

javascript - 鼠标悬停在菜单项上可以触发另一个元素的 native ":hover"状态吗?

Java 数组 - 复制和编辑它们

angular - 如何动态地为 ag-grid 提供 ID?