简体   繁体   中英

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

I have below data in const rows.

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

I want to compare each and every object of const rows.selected_parameter_value with parameter_value and label_value from this.selectedParameterContext.records[0].selected_parameter_value .

And delete those objects from this.selectedParameterContext.records[0].selected_parameter_value which are not present in const rows.selected_parameter_value

For example -

In the const rows.selected_parameter_value , only a and d object are present, b and c are not present.

So remove object whose parameter and label values are b and c from this.selectedParameterContext.records[0].selected_parameter_value .

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',
              }]
            }]
        };

Expected Output

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

Below code

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");
}
  • You need to loop though this.selectedParameterContext.records
  • then inside first loop, second loop though record.selected_parameter_value
  • then use rows.selected_parameter_value.find(...) to validate
  • then use .splice(...) to remove item from this.selectedParameterContext.records
  • or add required data to array

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

For new array variable

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

your data initialized as const . It is mean that variable is not mutable. So I suggest you to rebuild like this.

 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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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