如何根据 Angular 中的键和值更新对象数组

How to update array of objects based on key and values in Angular

我有以下 3 个带有数据的对象。

我想在里面找到const oldData.data.parameter_value = b and oldData.data.label_value =b const newData.selected_parameter_value.

的每个对象

如果 newData 数组 中存在值,则将所有 newData.selected_parameter_value.parameter_value = b and newData.selected_parameter_value.label_value = b 替换为 const updatedData.data.parameter_value = red and const updatedData.data.label_value = red.

前-

const oldData = {
  "action": "edit",
  "data": {
    "parameter_value": "b",
    "label_value": "b"
  }
};

const updatedData = {
  "action": "update",
  "data": {
    "parameter_value": "red",
    "label_value": "red"
  }
};

const newData = [
  {
    "context": [],
    "selected_parameter_value": [
      {
        "label_value": "a",
        "parameter_value": "a"
      },
      {
        "label_value": "b",
        "parameter_value": "b"
      }
    ]
  },
  {
    "context": [],
    "selected_parameter_value": [
      {
        "label_value": "b",
        "parameter_value": "b"
      }     
    ]
  }
];

预期输出

const newData = [
  {
    "context": [],
    "selected_parameter_value": [
      {
        "label_value": "a",
        "parameter_value": "a"
      },
      {
        "label_value": "red",
        "parameter_value": "red"
      }
    ]
  },
  {
    "context": [],
    "selected_parameter_value": [
      {
        "label_value": "red",
        "parameter_value": "red"
      }     
    ]
  }
];

谁能帮我做这个。

我试过下面的代码,但我不知道如何更新 newData 中的匹配对象并保持所有对象不变。

editContextData(data) {
    if (data.action === 'edit') {
      this.oldData = data;
    }
    if (data.action === 'update') {
      const oldData = this.oldData;
      const updatedData = this.newData;
      const newData = this.selectedParameterContext.records;
      const newSelectedParameterContext = {
        'records': []
      };     
      newData.forEach(function (record) {
        const newSelectedParameterValues = [];
        record.selected_parameter_value.forEach(function (parameter) {
            if(parameter.parameter_value === oldData.data.parameter_value && parameter.label_value === oldData.data.label_value){
               // here i want to update object and push new values in array.             
                newSelectedParameterValues.push(updatedData);
            }         
        });      
        newSelectedParameterContext.records.push({ 'selected_parameter_value': newSelectedParameterValues });
      
      });
      console.log(newSelectedParameterContext,"rrr");
      this.selectedParameterContext = newSelectedParameterContext;
    }
  }
        newData.forEach((item) => {
        item.selected_parameter_value.forEach((obj) => {
            if (oldData.data.parameter_value === obj.parameter_value) {
                obj.parameter_value = updatedData.data.parameter_value;
            }

            if (oldData.data.label_value === obj.label_value) {
                obj.label_value = updatedData.data.label_value;
            }
        })

或者如果两者必须同时相同,则:

        newData.forEach((item) => {

        item.selected_parameter_value.forEach((obj) => {

            if (oldData.data.parameter_value === obj.parameter_value && oldData.data.label_value === obj.label_value) {
                obj.parameter_value = updatedData.data.parameter_value;
                obj.label_value = updatedData.data.label_value;
            }
            
        });
    });