我有一个数组,我想用另一个数组过滤。我的目标是使用两个值过滤数组,我希望结果仅与这两个值完全匹配。这是我到目前为止的内容:
const array = [
{
title: 'Title A',
someOtherProps: [
'AAA',
]
}, {
title: 'Title B',
someOtherProps: [
'AAA',
'BBB',
]
}, {
title: 'Title C',
someOtherProps: [
'BBB',
'CCC'
]
}, {
title: 'Title D',
someOtherProps: [
'BBB',
]
}, {
title: 'Title E',
someOtherProps: [
'CCC'
]
},
]
const filter = [
'AAA',
'BBB',
]
let result = array.filter(obj => obj.someOtherProps.some(props => filter.includes(props)))
console.log(result);
因此,我的结果中包含带有过滤值的对象。
// My Result
{
title: 'Title A'
someOtherProps: [
'AAA',
]
}, {
title: 'Title B'
someOtherProps: [
'AAA',
'BBB',
]
}, {
title: 'Title C'
someOtherProps: [
'BBB',
'CCC'
]
}, {
title: 'Title D'
someOtherProps: [
'BBB',
]
}
到目前为止,一切都很好。但我不需要所有具有值之一的对象。我需要对象,它恰好将这两个值组合在一起。
// Wanted Result
{
title: 'Title B'
someOtherProps: [
'AAA',
'BBB',
]
}
我找不到办法。我知道如何获得两个数组的差。但是,如果您知道我的意思,我需要两个值的区别。
答案 0 :(得分:3)
在filter
数组上使用Array#every()
并检查其所有值是否包含在对象someOtherProps
中。
如果您只想要一个对象,可以使用Array#find()
const array = [ { title: 'Title A', someOtherProps: [ 'AAA', ] }, { title: 'Title B', someOtherProps: [ 'AAA', 'BBB', ] }, { title: 'Title C', someOtherProps: [ 'BBB', 'CCC' ] }, { title: 'Title D', someOtherProps: [ 'BBB', ] }, { title: 'Title E', someOtherProps: [ 'CCC' ] }, ]
const filter = ['AAA','BBB',]
let res = array.find(x => filter.every( a => x.someOtherProps.includes(a)));
console.log(res)
如果希望所有符合条件的元素,请使用filter()
。
const array = [ { title: 'Title A', someOtherProps: [ 'AAA', ] }, { title: 'Title B', someOtherProps: [ 'AAA', 'BBB', ] }, { title: 'Title C', someOtherProps: [ 'BBB', 'CCC' ] }, { title: 'Title D', someOtherProps: [ 'BBB', ] }, { title: 'Title E', someOtherProps: [ 'CCC' ] }, ]
const filter = ['AAA','BBB',]
let res = array.filter(x => filter.every( a => x.someOtherProps.includes(a)));
console.log(res)
答案 1 :(得分:0)
对此进行更改:
array.filter(x => filter.every( a => x.someOtherProps.includes(a)));