[英]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.