【发布时间】:2021-03-16 13:28:42
【问题描述】:
我在使用对象过滤器时遇到问题。
我想要做的是在给定参数等于对象值时过滤对象数组。 并且仅当对象中的所有值都等于这些参数时才返回对象。
let payload = {
product: 'product1',
author = {
id: 12,
name = 'author1'
}
}
Array I want to filter based on above parameters:
let data = [
{
product: 'product1,
author: { id: 12, name: 'author1'}
},
{
product: 'product1,
author: { id: 20, name: 'author2'}
},
{
product: 'product3,
author: { id: 12, name: 'author1'}
},
]
在这个例子中作为一个参数:product1 另一个 id author {id: 12, name: 'author1'} 那么只有一个对象匹配:
let result = [{
product: 'product1,
author: { id: 12, name: 'author1'}
}]
我的做法是:
let keys = Object.keys(paylaod)
let matched
keys.forEach(key => {
matched = data.filter(item => item[key] == payload[key])
})
我得到的是:
matched= [
{
product: 'product1,
author: { id: 12, name: 'author1'}
},
{
product: 'product1,
author: { id: 20, name: 'author2'}
},
]
我需要修改我的过滤函数才能得到结果:
matched = [{
product: 'product1,
author: { id: 12, name: 'author1'}
}]
如果有所有给定的参数,有什么方法可以过滤对象??
【问题讨论】:
标签: arrays json object ecmascript-6 filter