Javascript es6 - 如何删除对象数组中的重复项,除了最后一个副本?

Hoà*_*yễn 3 javascript typescript ecmascript-6

我有一个数组:

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}
]
Run Code Online (Sandbox Code Playgroud)

我想删除具有相同价格的重复项,并且仅保留最后一个重复项,然后根据价格从最高到最低对数组进行排序.这是我想要的结果:

var result = [
  {price: 10, amount: 20},
  {price : 7, amount: 15},
  {price: 5, amount: 100},
  {price: 3, amount: 65},
  {price: 2, amount: 34}
]
Run Code Online (Sandbox Code Playgroud)

gur*_*372 6

用于reduce首先将其转换为对象以删除重复项,最后一个副本应覆盖前一个副本

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

将其转换回数组并对其进行排序

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

演示

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 );
Run Code Online (Sandbox Code Playgroud)