簡體   English   中英

如何過濾嵌套的 javascript object 並返回父級?

[英]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",
            ...
        }
    ]
}
  • 僅當日期匹配時才會返回訂單
  • 僅返回匹配的正確可購買物品(例如 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM