簡體   English   中英

從嵌套對象javascript中刪除對象

[英]Remove object from a nested object javascript

我有一個對象:

s={
   "ex_obj":{
      "arr1":[
         {
            "id":"item1",
            "version":"2020-04-29t14:14:08"
         },
         {
            "id":"item1",
            "version":"2020-04-29t14:14:09"
         }
      ],
      "arr2":[
         {
            "id":"item1",
            "version":"2020-04-29t14:14:10"
         },
         {
            "id":"item1",
            "version":"2020-04-29t14:14:09"
         }
      ]
   }
}

我需要從ex_obj的值數組中刪除一個嵌套對象, ex_obj version 的值滿足條件並將該對象的鍵存儲在數組中。

例如,如果我想要沒有子對象版本為"2020-04-29t14:14:09"對象,我的輸出將是

{
   "ex_obj":{
      "arr1":[
         {
            "id":"item1",
            "version":"2020-04-29t14:14:08"
         }
      ],
      "arr2":[
         {
            "id":"item1",
            "version":"2020-04-29t14:14:10"
         }
      ]
   }
}

與數組['arr1', 'arr2']因為我想要其值已更改的鍵數組。

這是我的嘗試。 我可以移除對象,但當然無法捕獲密鑰。

Object.values(s['ex_obj']).map(e =>e)
          .map(x =>
            x.filter((f) => {
              return f.version != "2020-04-29t14:14:09";
            }));

我怎樣才能獲得輸出?

x是包含對數組的引用的局部變量。 分配給它不會修改它來自的屬性。

使用Object.entries()來獲取屬性名稱和值,然后您可以重新分配給該屬性。 這也將允許您制作已修改的屬性數組。

 s = { "ex_obj": { "arr1": [{ "id": "item1", "version": "2020-04-29t14:14:08" }, { "id": "item1", "version": "2020-04-29t14:14:09" } ], "arr2": [{ "id": "item1", "version": "2020-04-29t14:14:10" }, { "id": "item1", "version": "2020-04-29t14:14:09" } ] } } let updated = []; let remove = "2020-04-29t14:14:09"; Object.entries(s.ex_obj).forEach(([key, array]) => { let filtered = array.filter(({ version }) => version != remove); if (filtered.length < array.length) { s.ex_obj[key] = filtered; updated.push(key); } }); console.log(s); console.log(updated);

如果允許銷毀原始對象,則可以循環遍歷鍵然后過濾數組:

 let s={ "ex_obj":{ "arr1":[ { "id":"item1", "version":"2020-04-29t14:14:08" }, { "id":"item1", "version":"2020-04-29t14:14:09" } ], "arr2":[ { "id":"item1", "version":"2020-04-29t14:14:10" }, { "id":"item1", "version":"2020-04-29t14:14:09" } ] } } let ex_obj=s.ex_obj; for(let key of Object.keys(ex_obj)) ex_obj[key]=ex_obj[key].filter(item=>item.version!=="2020-04-29t14:14:09"); console.log(s);

如果您必須復制,那也沒什么不同,只是您必須使用某種克隆,例如 JSON-hack 或其他:

 let s={ "ex_obj":{ "arr1":[ { "id":"item1", "version":"2020-04-29t14:14:08" }, { "id":"item1", "version":"2020-04-29t14:14:09" } ], "arr2":[ { "id":"item1", "version":"2020-04-29t14:14:10" }, { "id":"item1", "version":"2020-04-29t14:14:09" } ] } } let ex_obj=s.ex_obj; let result={}; for(let key of Object.keys(ex_obj)) result[key]=JSON.parse(JSON.stringify(ex_obj[key].filter(item=>item.version!=="2020-04-29t14:14:09"))); result={ex_obj:result}; console.log(result);

暫無
暫無

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

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