如何根据键和值比较对象数组并删除对象

How to compare array of object based on key and value and delete object

我在常量行中有以下数据。

const rows = {
      "selected_parameter_value": [
        {
          "parameter_value": "a",
          "label_value": "a"
        },
        {
          "parameter_value": "d",
          "label_value": "d"
        }
      ]
    };

我想将 const rows.selected_parameter_value 的每个对象与 parameter_valuethis.selectedParameterContext.records[0].selected_parameter_valuelabel_value 进行比较。

并从 this.selectedParameterContext.records[0].selected_parameter_value 中删除 const rows.selected_parameter_value

中不存在的那些对象

例如-

const rows.selected_parameter_value中,只有ad对象存在,bc不存在。

所以从this.selectedParameterContext.records[0].selected_parameter_value.

中移除参数和标签值为b和c的对象
this.selectedParameterContext = {
          'records': [
            {
              'selected_parameter_value': [{
                'parameter_value': 'a',
                'label_value': 'a'
              },
              {
                'parameter_value': 'b',
                'label_value': 'b',
              }]
            },
            {
              'selected_parameter_value': [{
                'parameter_value': 'c',
                'label_value': 'c'
              },
              {
                'parameter_value': 'd',
                'label_value': 'd',
              }]
            }]
        };

预期输出

this.selectedParameterContext = {
  'records': [
    {
      'selected_parameter_value': [{
        'parameter_value': 'a',
        'label_value': 'a'
      }]
    },
    {
      'selected_parameter_value': [
        {
          'parameter_value': 'd',
          'label_value': 'd',
        }]
    }]
};

代码下方

deleteContextData(rows ) { 
    const paramArray = rows.selected_parameter_value;
    const newArrayData = this.selectedParameterContext.records[0].selected_parameter_value;
    const removeMatchingData = (paramArray, toCompareWith) => {
      return paramArray.filter(({ label_value }) => !toCompareWith.some(compareObj => compareObj.label_value === label_value));
    }
    console.log(removeMatchingData(paramArray, newArrayData),"newarray");
}
  • 你需要循环 this.selectedParameterContext.records
  • 然后在第一个循环中,第二个循环 record.selected_parameter_value
  • 然后使用rows.selected_parameter_value.find(...)验证
  • 然后使用 .splice(...)this.selectedParameterContext.records
  • 中删除项目
  • 或将所需数据添加到数组

const rows = {
  "selected_parameter_value": [
    {
      "parameter_value": "a",
      "label_value": "a"
    },
    {
      "parameter_value": "d",
      "label_value": "d"
    }
  ]
};

const selectedParameterContext = {
  'records': [
  {
    'selected_parameter_value': [
      {
        'parameter_value': 'a',
        'label_value': 'a'
      },
      {
        'parameter_value': 'b',
        'label_value': 'b',
      }
    ]
  },
  {
    'selected_parameter_value': [
      {
        'parameter_value': 'c',
        'label_value': 'c'
      },
      {
        'parameter_value': 'd',
        'label_value': 'd',
      }
    ]
  }
  ]
};

selectedParameterContext.records.forEach(function(record, recordIndex) {
  record.selected_parameter_value.forEach(function(parameter, parameterIndex) {
    const isValid = rows.selected_parameter_value.find(function(item) {
      return parameter.parameter_value === item.parameter_value && parameter.label_value === item.label_value;
    });
    if (!isValid) {
      selectedParameterContext.records[recordIndex].selected_parameter_value.splice(parameterIndex, 1);
    }
  });
});

console.log('selectedParameterContext: ', selectedParameterContext);

对于新数组变量

const rows = {
      "selected_parameter_value": [
        {
          "parameter_value": "a",
          "label_value": "a"
        },
        {
          "parameter_value": "d",
          "label_value": "d"
        }
      ]
    };

    const selectedParameterContext = {
      'records': [
      {
        'selected_parameter_value': [
          {
            'parameter_value': 'a',
            'label_value': 'a'
          },
          {
            'parameter_value': 'b',
            'label_value': 'b',
          }
        ]
      },
      {
        'selected_parameter_value': [
          {
            'parameter_value': 'c',
            'label_value': 'c'
          },
          {
            'parameter_value': 'd',
            'label_value': 'd',
          }
        ]
      }
      ]
    };
    
    // Building new array variable
    const newSelectedParameterContext = {
      'records': []
    };

    selectedParameterContext.records.forEach(function(record, recordIndex) {
      const newSelectedParameterValues = [];
      record.selected_parameter_value.forEach(function(parameter, parameterIndex) {
        const isValid = rows.selected_parameter_value.find(function(item) {
          return parameter.parameter_value === item.parameter_value && parameter.label_value === item.label_value;
        });
        if (isValid) {
          newSelectedParameterValues.push(parameter);
        }
      });
      newSelectedParameterContext.records.push({'selected_parameter_value': newSelectedParameterValues});
    });

    console.log('newSelectedParameterContext: ', newSelectedParameterContext);

您的数据已初始化为 const。这意味着变量是不可变的。所以我建议你这样重建。

const selectedParameterContext = {
  'records': [
    {
      'selected_parameter_value': [{
        'parameter_value': 'a',
        'label_value': 'a'
      },
      {
        'parameter_value': 'b',
        'label_value': 'b',
      }]
    },
    {
      'selected_parameter_value': [{
        'parameter_value': 'c',
        'label_value': 'c'
      },
      {
        'parameter_value': 'd',
        'label_value': 'd',
      }]
    }]
};

var selectedParameterContext2 = {
  'records': []
}

selectedParameterContext.records.forEach(e=>{
  var records = [];
  e.selected_parameter_value.forEach(f=>{
    if(f.parameter_value==='a'||f.parameter_value==='d')
      records.push(f)
    
  })
  selectedParameterContext2.records.push({'selected_parameter_value': records})
})

console.log(selectedParameterContext2)