使用某些条件ES6

时间:2019-06-19 09:32:05

标签: javascript arrays ecmascript-6 javascript-objects

大家好,我想用ES6 javascript中的一些代码来解决此问题,我的数据是对象数组,如下所示

array = [
{
  name: "SI",
  value: 3
},
{
  name: "MI",
  value: 2
},
{  
  name: "SI",
  value: 7
},
{ 
  name: "SI",
  value: 9
},
{
  name: "MI",
  value: 3
}
] 

我只是想根据名称具有最高值的不同对象,如以下结果所示

result = [
{ 
  name: "SI",
  value: 9
},
{
  name: "MI",
  value: 3
}
]

2 个答案:

答案 0 :(得分:0)

首先还原为中间对象,然后映射该对象的条目,可能是最有效的方法:

const result = Object.entries(array.reduce((a, {name, value}) => {
  a[name] = a[name] && a[name] >= value ? a[name] : value;
  return a;
}, {})).map(([name, value]) => ({name, value}));

完整代码段:

const array = [{
    name: "SI",
    value: 3
  },
  {
    name: "MI",
    value: 2
  },
  {
    name: "SI",
    value: 7
  },
  {
    name: "SI",
    value: 9
  },
  {
    name: "MI",
    value: 3
  }
];

const result = Object.entries(array.reduce((a, {name, value}) => {
  a[name] = a[name] && a[name] >= value ? a[name] : value;
  return a;
}, {})).map(([name, value]) => ({name, value}));

console.log(result);

答案 1 :(得分:0)

您可以使用array#reduce在对象累加器中累加不同的name。对于每个存储的对象,将value与存储的value进行比较,并在小于当前value的情况下进行更新

let arr = [ { name:"SI", value:3 }, { name:"MI", value:2 }, { name:"SI", value:7 }, { name:"SI", value:9 }, { name:"MI", value:3 } ],
    result = Object.values(arr.reduce((r,{name, value}) => {
      r[name] = r[name] || {name, value: 0};
      if(r[name].value < value)
        r[name].value = value;
      return r;
    },{}));
console.log(result);
.as-console-wrapper {max-height: 100% !important; top: 0;}