【问题标题】:Merge Duplicate values in Objects if more than one Objects fields are similar如果多个对象字段相似,则合并对象中的重复值
【发布时间】:2022-09-23 02:04:02
【问题描述】:

如果另一个对象中存在多个相同的字段,我正在尝试合并重复值。

在下面的示例中 - 我有多个相同的对象资产ID事件代码这是重复的,所以我需要保留一个并合并它们价值.我试图这样做,但没有得到正确的解决方案和相同的输出。

const transaction = [{
    value: 5,
    asset_id: \'ABC\',
    event_code : 1
}, {
    value: 15,
    asset_id: \'HGF\',
    event_code : 1
}, {
    value: 15,
    asset_id: \'XYZ\',
    event_code : 2
}, {
    value: 20,
    asset_id: \'XYZ\',
    event_code : 2
}, {
    value: 25,
    asset_id: \'DEF\',
    event_code : 3
}, {
    value: 20,
    asset_id: \'HGF\',
    event_code : 3
}, {
    value: 20,
    asset_id: \'HGF\',
    event_code : 3
},
{
    value: 10,
    asset_id: \'ABC\',
    event_code : 1
}];
 
let newArr = [];
transaction.forEach(function (obj, ind, arr) {
    if (ind === arr.length - 1 || obj.asset_id !== arr[ind + 1].asset_id && obj.event_code!== arr[ind + 1].event_code) {
        newArr.push(obj);
    } else {
        arr[ind + 1].value+= obj.value;
    }
});
 
console.log(newArr)

预期输出应该是这样的:

[{
   value: 15,
   asset_id: \'ABC\',
   event_code: 1
}, {
   value: 15,
   asset_id: \'HGF\',
   event_code: 1
}, {
   value: 35,
   asset_id: \'XYZ\',
   event_code: 2
} {
   value: 25,
   asset_id: \'DEF\',
   event_code: 3
}, {
   value: 40,
   asset_id: \'HGF\',
   event_code: 3
}]

    标签: javascript node.js arrays


    【解决方案1】:

    这是适合您的解决方案

        const arr = [{
        value: 5,
        asset_id: 'ABC',
        event_code : 1
    }, {
        value: 15,
        asset_id: 'HGF',
        event_code : 1
    }, {
        value: 15,
        asset_id: 'XYZ',
        event_code : 2
    }, {
        value: 20,
        asset_id: 'XYZ',
        event_code : 2
    }, {
        value: 25,
        asset_id: 'DEF',
        event_code : 3
    }, {
        value: 20,
        asset_id: 'HGF',
        event_code : 3
    }, {
        value: 20,
        asset_id: 'HGF',
        event_code : 3
    },
    {
        value: 10,
        asset_id: 'ABC',
        event_code : 1
    }];
        const fun = (ar)=>{
         const output = ar.reduce((prev, curr) => {
          const tmp = prev.find(e => e.asset_id===curr.asset_id);
            if (tmp) {
              tmp.value = curr.value+tmp.value;
            } else {
              prev.push({
                asset_id: curr.asset_id,
                event_code: curr.event_code,
                value : curr.value
              });
            }
            return prev;
          }, []);
          return output
        }
        console.log(fun(arr))

    【讨论】:

      猜你喜欢
      • 2020-05-03
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 2018-08-17
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      相关资源
      最近更新 更多