[英]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);
但它現在給了我任何輸出
Object#entries
,獲取items
的鍵值對Array#filter
,遍歷上面的數組qty_
開頭且值不為空的鍵。 您可以使用Object#keys
、 Array#some
和String#startsWith
來做到這一點。Object#fromEntries
,將過濾后的對再次轉換為對象。 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.