首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态过滤数组

动态过滤数组
EN

Stack Overflow用户
提问于 2021-02-09 16:59:42
回答 2查看 50关注 0票数 1

我有一个非常类似于How to filter array by array of dynamic objects?的需求,但是我需要对过滤器对象中的所有值进行过滤。请看下面的考试

代码语言:javascript
运行
复制
let cardsArray = [
   {"brand":"National Treasures","manufacturer":"Panini","series":"Contenders","status":"Own","userName":"tyty","year":"2011"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Contenders","status":"Own","userName":"jinky32","year":"2011"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Century Materials","status":"Own","userName":"tyty","year":"2010"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Century Materials","status":"Own","userName":"dfgdf","year":"2010"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Century Materials","status":"Own","userName":"tyty","year":"2010"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Contenders","status":"Own","userName":"gdgg","year":"2010"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Century Materials","status":"Own","userName":"tyty","year":"2010"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Century Materials","status":"Own","userName":"tyty","year":"2010"}
]
//const filters = {userName:"tyty",status:"Own",year:"2011",series:"Contenders"}
//const filters = {series:"Contenders",year:"2011"};
const filters = {series:"Contenders"};


let final = cardsArray.filter(value => {
  return Object.entries(value).some(([key, value]) => {
    return typeof value == 'string' && value.includes(filters[key])
  })
})

console.log(final)

如果我的filter对象包含一对(例如const filters = {series:"Contenders"}; ),那么它就能工作。然而,我需要基于多对筛选,例如const filters = {series:"Contenders",year:"2011"}; (以及最终更多),然而,当我这样做时,第二对没有被考虑。

有人能给出正确的建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-09 17:06:24

条件应该是所有filterskey-value对都满足于card元素:

代码语言:javascript
运行
复制
let cardsArray = [
   {"brand":"National Treasures","manufacturer":"Panini","series":"Contenders","status":"Own","userName":"tyty","year":"2011"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Contenders","status":"Own","userName":"jinky32","year":"2011"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Century Materials","status":"Own","userName":"tyty","year":"2010"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Century Materials","status":"Own","userName":"dfgdf","year":"2010"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Century Materials","status":"Own","userName":"tyty","year":"2010"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Contenders","status":"Own","userName":"gdgg","year":"2010"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Century Materials","status":"Own","userName":"tyty","year":"2010"},
   {"brand":"National Treasures","manufacturer":"Panini","series":"Century Materials","status":"Own","userName":"tyty","year":"2010"}
]
const filters = {series:"Contenders",year:"2011"};


let final = cardsArray.filter(card => 
  Object.entries(filters).every(([key, value]) => card[key]===value)
);

console.log(final)

票数 3
EN

Stack Overflow用户

发布于 2021-02-09 17:14:04

尝试以下几点:

代码语言:javascript
运行
复制
let final = cardsArray.filter(obj => {
    return ! Object
        .keys(filters)
        .map(key => obj[key] === filters[key])
        .includes(false)
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66123525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档