【问题标题】:Javascript Lodash - replace object in objectJavascript Lodash - 替换对象中的对象
【发布时间】:2016-10-20 20:03:41
【问题描述】:

我有一个这样的对象:

{
    "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 用于负载

我需要向 measure 元素添加另一个对象,搜索他的姓名和类型。

例如,给定 memorymemory2 作为变量值和一个对象{ "date": "date 1", "value": "10" },我需要将其连接起来以测量第二个元素(即 memory2 ) 在第一棵记忆树中。

我也需要将“测量”数组保持不超过 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" }
            ]
        }
    }
}

【问题讨论】:

  • 这是关于动态访问和设置对象属性值吗..?
  • schedule 和 measure 属性是“静态的”,所有其他属性都是动态的。在一些树上我可以有记忆和负载,在其他树上我可以有门和桌子(我想到的前两个名字:))。 load1、memory1 等也是如此。我需要在树中找到这些名称,然后进行替换。但是,我认为唯一的方法是沿着树迭代并检查===

标签: javascript lodash


【解决方案1】:

为了动态访问和修改嵌套对象属性值,您可以使用像 Object.prototype.getNestedValue() 这样的 Object 方法,它采用一系列字符串或整数作为参数(对象属性的字符串和数组索引的整数),顺序为它们是如何嵌套的。让我们看看...

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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2019-11-02
    • 2021-07-15
    • 2013-10-25
    相关资源
    最近更新 更多