我有一个像这样的数组。
var data = [{
name: 'Apple',
category: 'Fruit',
value: 12
}, {
name: 'Apple',
category: 'Fruit',
value: 20
}, {
name: 'Orange',
category: 'Fruit',
value: 65
}, {
name: 'Orange',
category: 'Fruit',
value: 40
}]
我需要得到一个像这样的数组:
var newData = [{
name: 'Apple',
category: 'Fruit',
value: 20
}, {
name: 'Orange',
category: 'Fruit',
value: 65
}]
即获取数组中每个“name”键的最高值。
这是我尝试过的:
var data = [{
name: 'Apple',
category: 'Fruit',
value: 12
}, {
name: 'Apple',
category: 'Fruit',
value: 20
}, {
name: 'Orange',
category: 'Fruit',
value: 65
}, {
name: 'Orange',
category: 'Fruit',
value: 40
}]
console.log(data.reduce(function(prev, current) {
return (prev.name !== current.name && prev.value > current.value) ? prev : current
}))
请指教。
最佳答案
您需要跟踪每个 名称
当前最高value
项,因此您可以尝试减少到一个对象,其键是name
,values 是该名称当前获胜的value
。然后,获取结果对象的值:
var data = [{
name: 'Apple',
category: 'Fruit',
value: 12
}, {
name: 'Apple',
category: 'Fruit',
value: 20
}, {
name: 'Orange',
category: 'Fruit',
value: 65
}, {
name: 'Orange',
category: 'Fruit',
value: 40
}];
console.log(Object.values(
data.reduce((a, item) => {
const { name, value } = item;
if (!a[name] || a[name].value < value) a[name] = item;
return a;
}, {})
));
(您的 prev.name !== current.name ...
方法仅在您仅尝试从其中获取一个项目时才有效end - 因为您需要更多,所以您需要一个可以包含多个项目的对象。)
关于javascript - 根据 2 个键的属性减少数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53292876/