繁体   English   中英

Javascript Lodash - 替换对象中的对象

[英]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" }
            ]
        }
    }
}

给定一个名称 (在此对象中是memoryloads )和一个类型 (在此对象中是memory1memory2memory2用于内存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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM