簡體   English   中英

如果內部對象為空,則刪除對象數組

[英]Remove array of object if object inside is empty

我正在准備這樣的數組

 datas[5] = { "qty_sized": "1", "resolution": "5", "status": "", "order": 1342 };

其中 [5] 是動態的響應。

我有和對象 mydata 並且在里面我有一個對象項目。

我將數組推送到對象項,並分配

Object.assign(mydatadata.items, datas);

現在 mydata.items 有一個數組集,`

items{
1 {qty_auth: "", resolution: "4", status: "", order: "1495"},
5 {qty_sized: "1", resolution: "4", status: "", order: "1485"}
}`

現在如果 qty_auth: "" ,我需要從中檢查 qty_ 是否為空,然后刪除數組。 所以預期的輸出是這樣的: 注意:qty_ 在這里是動態的。

items{ 5 {qty_sized: "1", resolution: "4", status: "", order: "1485"} }

我想在同一個對象 mydata.items 中得到結果

我嘗試過這樣的事情

const mydatadata.items  = mydata.items.filter((o) =>
            Object.keys(o).some((k) => k.startsWith("qty") && o[k])
);

console.log(result);

但它現在給了我任何輸出

 const obj = { items: { 1: {qty_auth: "", resolution: "4", status: "", order: "1495"}, 5: {qty_sized: "1", resolution: "4", status: "", order: "1485"} } }; obj.items = Object.fromEntries( Object.entries(obj.items) .filter(([_, item]) => Object.keys(item).some(key => key.startsWith('qty_') && item[key]) ) ); console.log(obj);

你在談論一個數組,但使用大括號而不是方括號。 為了 filter() 工作,它必須看起來像:

mydata = {
   items: [
      {qty_auth: "", resolution: "4", status: "", order: "1495"},
      {qty_sized: "1", resolution: "4", status: "", order: "1485"}
   ]
}

假設它是一個實際的數組,“const mydatadata.items”仍然存在問題,或者至少它會給我一個錯誤,因為 mydatadata 沒有初始化。 除非它是一個錯字並且它應該是 mydata,但是你會重新聲明它。 所以取決於你想要什么:

mydata.items = mydata.items.filter((o) =>
        Object.keys(o).some((k) => k.startsWith("qty") && o[k])
);

或者

let mydatadata = {};
mydatadata.items = mydata.items.filter((o) =>
        Object.keys(o).some((k) => k.startsWith("qty") && o[k])
);

此外,您將結果存儲在 mydatadata 中,但您正在記錄變量結果。 所以根據前面的答案:

console.log(mydatadata);

或者

console.log(mydata);

這是一個小提琴: https ://jsfiddle.net/b57qa82d/

您可能應該只使用數組而不是對象。 當您不斷更改術語來描述您的數據時,您的問題並不清楚您需要什么結構。 例如:“現在mydata.items有一個數組集”但您的代碼說它應該是帶有鍵的對象,而不是數組。

所以我建議:將您的數據放入一個數組中,並通過遍歷每個對象的條目並檢查是否有任何以“qty”開頭的鍵的值不是空字符串來filter它。 然后,您可以將該過濾后的數組分配給myObject.items

 const data = [ { "qty_sized": "0", "resolution": "5", "status": "", "order": 2 }, { "qty_auth": "", "resolution": "5", "status": "", "order": 3 }, { "qty_auth": "1", "resolution": "5", "status": "", "order": 1342 }, { "qty_sized": "", "resolution": "2", "status": "", "order": 1 }, { "qty_sized": "1", "resolution": "1", "status": "", "order": 142 }]; const filtered = data.filter(obj => { return Object.entries(obj).find(([key, value]) => { return key.startsWith('qty') && value; }); }); const myObject = { items: filtered }; console.log(myObject);

附加文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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