如何在JavaScript中的嵌套子对象中添加新的键/值?

3

我希望能够向嵌套对象数组中添加新的键/值对。

这是现有的数组:

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

{...}
]

我需要将额外的属性添加到规则对象项中。
期望输出为:
[{
    "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"是一个变量,其中存储了数据。我需要进行上述修改并将其发送到下一级。

2个回答

2
您可以通过使用几个map和大量的对象重构来解决此问题:
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 })),
}));

如果规则为空怎么办? - Sathishkumar

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>

你可以参考以下示例。
希望这能帮到你!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接