Javascript es6 - How to remove duplicates in an array of objects, except the last duplicate one?

前端 未结 3 1064
野的像风
野的像风 2021-01-14 06:43

I have an array:

var arr = [
  {price: 5, amount: 100},
  {price: 3, amount: 50},
  {price: 10, amount: 20},
  {price: 3, amount: 75},
  {price: 7, amount: 1         


        
3条回答
  •  旧时难觅i
    2021-01-14 07:48

    Use reduce to convert it an object first to remove the duplicates and last duplicate should override the previous one

    var obj = arr.reduce( ( acc, c ) =>  Object.assign(acc, {[c.price]:c.amount}) , {});
    

    Convert it back to array and sort the same

    var output = Object.keys( obj )
                  .map( s => ({ price : s, amount : obj[ s ] }) )
                  .sort( ( a, b )  => b.price - a.price );
    

    Demo

    var arr = [
      {price: 5, amount: 100},
      {price: 3, amount: 50},
      {price: 10, amount: 20},
      {price: 3, amount: 75},
      {price: 7, amount: 15},
      {price: 3, amount: 65},
      {price: 2, amount: 34}
    ];
    var obj = arr.reduce( ( acc, c ) =>  Object.assign(acc, {[c.price]:c.amount}) , {});
    var output = Object.keys( obj )
                  .map( s => ({ price : s, amount : obj[ s ] }) )
                  .sort( ( a, b )  => b.price - a.price );
    console.log( output );

提交回复
热议问题