[英]How can I filter a nested javascript object and return the parent?
我正在嘗試將嵌套的 object 過濾成兩部分,然后如果有任何匹配的兄弟姐妹要返回,則返回父(和兄弟姐妹) object 。
我一直在看這個 SO線程作為參考。
我想我很接近,但不太確定我做錯了什么。
我有一個看起來像這樣的order
:
{
"name": "Name",
"email": "email@email.com",
"createdAt": "2021-12-01T21:19:29.682Z",
"purchasables": [
{
"type": "FOO",
...
},
{
"type": "BAR",
...
}
]
}
任何給定的訂單都可以包含多個東西(可購買)。 我正在嘗試過濾訂單日期order.createdAt
,然后過濾可購買類型。
// vue.js
data() {
return {
items: [],
day: dayjs()
};
},
props: {
orders: {
type: Array,
required: false,
default: () => [],
},
},
methods: {
filterPurchasables() {
this.items = this.orders.filter((order) => {
order.purchasables.every((purchasable) => {
console.log('type: ', purchasable.type); // FOO
return purchasable.type === 'FOO';
});
return dayjs(order.createdAt).isSame(this.day, "date");
});
},
},
如果我只過濾訂單的createdAt
日期,事情似乎運作良好。
this.items = this.orders.filter((order) => {
return dayjs(order.createdAt).isSame(this.day, "date");
});
最后,我想要找回的是:
{
"name": "Name",
"email": "email@email.com",
"createdAt": "2021-12-01T21:19:29.682Z",
"purchasables": [
{
"type": "FOO",
...
}
]
}
目前,我總是把兩個可購買的東西都拿回來。 我曾嘗試使用.some()
但得到了相同的結果。
感謝您的任何建議!
編輯
這就是我現在所擁有的,似乎正在得到我所追求的結果。 我不相信這是理想的...
this.items = this.orders.filter((order) => {
order.purchasables = order.purchasables.filter((p) =>{
return p.type === "FOO";
});
return dayjs(order.createdAt).isSame(this.day, "date");
});
您可以通過createdAt
屬性過濾數據,然后在過濾后的數據中,您可以再次過濾purchasables
的商品,如下所示:
this.items = this.orders.filter(order => dayjs(order.createdAt).isSame(this.day, "date")).map(item => ({...item, purchasables: item.purchasables.filter(p => p.type == 'FOO') }))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.