繁体   English   中英

如何在 javascript 的嵌套子 object 中添加新的键/值?

[英]How add new Key/value in nested child object in javascript?

我需要将新的键/值对添加到嵌套的 object 数组中。

这是现有数组

[{
    "featureId": "67d6e1bf-3919-4dcc-b636-236ab41d431b",
    "featureName": "Test name 1",
    "rules": [
        {
            "ruleId": "a9ab3ce2-e69c-4c0c-b561-1107baed1e68",
            "ruleName": "Sub test 1",
           
        },
        {
            "ruleId": "a9ab3ce2-e69c-4c0c-b561-1107baed1e68",
            "ruleName": "Sub Test 2",
            
        },
        {
            "ruleId": "a8003493-4471-4c8a-85c1-b15706359bb3",
            "ruleName": "Sub Test Three",
           
        }
    ]
},

{...}
]

我需要在规则 object 项中添加其他属性。

预计 output 是

[{
    "featureId": "67d6e1bf-3919-4dcc-b636-236ab41d431b",
    "featureName": "Test name 1",
    "rules": [
        {
            "ruleId": "a9ab3ce2-e69c-4c0c-b561-1107baed1e68",
            "ruleName": "Sub test 1",
            "temp_id" : 1
           
        },
        {
            "ruleId": "a9ab3ce2-e69c-4c0c-b561-1107baed1e68",
            "ruleName": "Sub Test 2",
            "temp_id" : 1
        },
        {
            "ruleId": "a8003493-4471-4c8a-85c1-b15706359bb3",
            "ruleName": "Sub Test Three",
           "temp_id" : 1 
        }
    ]
},

{...}
]

我需要动态添加 temp_id 属性。 我在下面尝试过它没有按预期工作

Object.keys(_this.existingConfigurations).map((key)=>_this.existingConfigurations[key].rules).reduce((n,id)=>n).map((ny,ni)=>{return {...ny, temp_id : uuid.v4()}});

这里“_this.existingConfigurations”是有数据的变量,我需要做上面的修改并发送到下一级。

你可以用几个map和健康剂量的 object 重组来解决这个问题:

const initial = [
  {
    featureId: "67d6e1bf-3919-4dcc-b636-236ab41d431b",
    featureName: "Test name 1",
    rules: [
      {
        ruleId: "a9ab3ce2-e69c-4c0c-b561-1107baed1e68",
        ruleName: "Sub test 1",
        temp_id: 1,
      },
      {
        ruleId: "a9ab3ce2-e69c-4c0c-b561-1107baed1e68",
        ruleName: "Sub Test 2",
        temp_id: 1,
      },
      {
        ruleId: "a8003493-4471-4c8a-85c1-b15706359bb3",
        ruleName: "Sub Test Three",
        temp_id: 1,
      },
    ],
  },
];

const result = initial.map((feature) => ({
  ...feature,
  rules: feature.rules.map((rule) => ({ ...rule, temp_id: 1 })),
}));

 var existingConfigurations = [{ "featureId": "67d6e1bf-3919-4dcc-b636-236ab41d431b", "featureName": "Test name 1", "rules": [ { "ruleId": "a9ab3ce2-e69c-4c0c-b561-1107baed1e68", "ruleName": "Sub test 1", }, { "ruleId": "a9ab3ce2-e69c-4c0c-b561-1107baed1e68", "ruleName": "Sub Test 2", }, { "ruleId": "a8003493-4471-4c8a-85c1-b15706359bb3", "ruleName": "Sub Test Three", } ] }]; existingConfigurations = _.map(existingConfigurations, (item) => ({...item, rules: _.map(_.get(item, 'rules'), (rule, idx) => ({...rule, temp_id: idx })) })); console.log(existingConfigurations);
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

你可以参考下面的例子。

希望这有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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