大家好,我想用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
}
]
答案 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;}