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