我有一个非常类似于How to filter array by array of dynamic objects?的需求,但是我需要对过滤器对象中的所有值进行过滤。请看下面的考试
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"};
(以及最终更多),然而,当我这样做时,第二对没有被考虑。
有人能给出正确的建议吗?
发布于 2021-02-09 17:06:24
条件应该是所有filters
的key-value
对都满足于card
元素:
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)
发布于 2021-02-09 17:14:04
尝试以下几点:
let final = cardsArray.filter(obj => {
return ! Object
.keys(filters)
.map(key => obj[key] === filters[key])
.includes(false)
})
https://stackoverflow.com/questions/66123525
复制相似问题