我有一个像这样的数组。
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
}]
这是数组中每个“名称”键的最大值。
这是我尝试过的:
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
项目,因此您可以尝试简化为一个对象,该对象的键是name
,值是该名称当前赢得的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 ...
方法仅在您最终尝试从中取出一项时才有效-因为您需要更多,所以需要一个可以包含多个项目的对象。)关于javascript - 根据2个键的属性精简数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53292876/