![](/img/trans.png)
[英]How to filter an array of objects (with arrays inside) with another array of objects
[英]How to filter an array of objects inside another array of objects
我有一系列“合作伙伴”(如下所示),需要通過 label 過濾它們。
partners:
[
{
name: 'Partner X',
solution: [
{
label: 'Label 1',
},
{
label: 'Label 2',
}
]
},
{
name: 'Partner Y',
solution: [
{
label: 'Label 1'
}
]
}
]
我的問題是我無法過濾“解決方案”數組。 我最好的嘗試是在另一個過濾器中使用一個過濾器,如下所示:
partnerFilter() {
const partnersClean = this.partners.filter(function(e) {
return e.solution.filter(function(item) {
return item.label === 'Label 2'
})
})
return partnersClean
}
結果始終顯示兩個合作伙伴。 我也在這里搜索了類似的案例,但是在數組中沒有 object ,他們使用 indexOf() 或 includes(),在這種情況下我都無法做到。
如果有人可以提供幫助,我將不勝感激。
這樣做是這樣的:
partnerFilter() {
const partnersClean = this.partners.map(function(e) {
e.solution = e.solution.filter(function(item) {
return item.label === 'Label 2'
});
return e;
})
return partnersClean
}
這將刪除輸入中帶有 label Label 1
的解決方案,保持name
等其他字段不變。 所有合作伙伴都將在 output 中,即使他們沒有任何solution
對象。
我剛剛通過評論幫助解決了。 使用 .some() 而不是 .filter() 返回真/假值。
partnerFilter() {
const setPartners = this.partners
.filter(p => p.solution.some(item => item.label === 'Label 2'))
return setPartners.filter(p => p.solution)
}
var data = {partners: [{
name: 'Partner X',
solution: [{
label: 'Label 1',
},
{
label: 'Label 2',
}
]
},
{
name: 'Partner Y',
solution: [{
label: 'Label 1'
}]
}
]};
console.log(data.partners.flatMap(i=>i.solution.filter(f=>f.label==="Label 2")))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.