我有一个对象数组,我们可以调用arrayOne并想与arrayTwo检查它是否包含任何与ArrayOne匹配的字符串,它将返回具有匹配数组的新数组。使用ES6可以做的最好的方法是什么?
示例:
ArrayOne = [
{
"sessionId":1,
"name":"session name 1",
"types":[
"type1",
"type 2"
],
"tracks":[
"track1",
"track 2"
]
},
{
"sessionId":2,
"name":"session name 2",
"types":[
"track 3",
"type 2"
],
"tracks":[
"track 3",
"track 2"
]
}
]
arrayTwo = ["track 3"] // or it can be ["track&3", "Type 2"] which it will return both array
返回
newArray = [ {
"sessionId":2,
"name":"session name 2",
"types":[
"track 3",
"type 2"
],
"tracks":[
"track 3",
"track 2"
]
}]
我尝试了以下方法:
arrayOne.filter((obj) => {
Object.keys(obj).forEach((key) => {
if (obj[key].toString().indexOf(arrayTwo) !== -1) {
this.setState({
newArray: [obj]
})
}
});
});
答案 0 :(得分:1)
如果您只关心track数组,则可以执行以下操作:
ArrayOne.filter((obj) => arrayTwo.some(x => obj.tracks.includes(x)));
.some()如果arrayTwo包含元素x这样obj.tracks具有匹配的元素,则返回true。
答案 1 :(得分:0)
const result = []
for(let item of arrayOne){
for(let filter of arrayTwo){
if(item.tracks.includes(filter))
return result.push(item)
}
}
将arrayOne的每个项中的每个tracks
与arrayTwo的每个项进行比较,如果arrayOne.tracks
包括数组2中的至少一个过滤器,则将其推入结果