[英]Javascript Lodash - replace object in object
我有一個像這樣的對象:
{
"memory": {
"memory1":{
"schedule":"every day",
"measure": [
{ "date": "date 1", "value": "10" }
]
},
"memory2": {
"schedule":"every month",
"measure": [
{ "date": "date 2", "value": "40" },
{ "date": "date 3", "value": "22" }
]
},
"memory3": {
"schedule": "every day",
"measure": []
}
},
"loads": {
"load1": {
"schedule":"every day",
"measure": [
{ "date": "date 4", "value": "40" }
]
}
}
}
給定一個名稱 (在此對象中是memory
和loads
)和一個類型 (在此對象中是memory1
, memory2
, memory2
用於內存 , load1
用於加載
我需要添加另一個對象來測量元素,搜索他的名字和類型。
例如,給定內存和memory2作為變量值和一個對象{ "date": "date 1", "value": "10" }
,我將需要連接它來測量第二個元素(即memory2)第一棵樹就是記憶。
我還需要維護“measure”數組不超過10個元素(FIFO策略),但這是另一個故事....
現在我用新措施創建了一個新對象,但如何在正確的樹位“替換”或“連接”它?
結果應該是:
{
"memory": {
"memory1":{
"schedule":"every day",
"measure": [
{ "date": "date 1", "value": "10" }
]
},
"memory2": {
"schedule":"every month",
"measure": [
{ "date": "date 2", "value": "40" },
{ "date": "date 3", "value": "22" },
{ "date": "date 3", "value": "22" } THIS IS THE ELEMENT TO ADD
]
},
"memory3": {
"schedule": "every day",
"measure": []
}
},
"loads": {
"load1": {
"schedule":"every day",
"measure": [
{ "date": "date 4", "value": "40" }
]
}
}
}
為了動態訪問和修改嵌套對象屬性值,您可以使用Object.prototype.getNestedValue()
類的Object方法。它按Object.prototype.getNestedValue()
將一系列字符串或整數作為參數(對象屬性的字符串和數組索引的整數)它們是如何嵌套的。 讓我們來看看...
Object.prototype.getNestedValue = function(...a) { return a.length > 1 ? (this[a[0]] !== void 0 && this[a[0]].getNestedValue(...a.slice(1))) : this[a[0]]; }; var data = { "memory": { "memory1":{ "schedule":"every day", "measure": [ { "date": "date 1", "value": "10" } ] }, "memory2": { "schedule":"every month", "measure": [ { "date": "date 2", "value": "40" }, { "date": "date 3", "value": "22" } ] }, "memory3": { "schedule": "every day", "measure": [] } }, "loads": { "load1": { "schedule":"every day", "measure": [ { "date": "date 4", "value": "40" } ] } } }, newMeasureData = { "date": "date 3", "value": "22" }; data.getNestedValue("memory","memory2","measure").push(newMeasureData); console.log(JSON.stringify(data,null,2));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.