我有一个对象数组,如。
[{
id: 1,
age: 23
}, {
id: 1,
age: 25
}, {
id: 2,
age: 230
}, {
id: 2,
age: 255
}, {
id: 3,
age: 232
}, {
id: 1,
age: 215
}]
我需要通过为每个id排序最高年龄来获得最终数组。所以最终阵列将是。
[{
id: 1,
age: 215
}, {
id: 2,
age: 255
}, {
id: 3,
age: 232
}]
答案 0 :(得分:1)
您可以构建一个散列,在该散列中存储具有每个id的最大年龄的对象。然后按数字对其键进行排序,并按顺序获取值。
var hash = array.reduce(function(hash, obj) {
if(!hash[obj.id]) hash[obj.id] = obj;
else if(hash[obj.id].age < obj.age) hash[obj.id] = obj;
return hash;
}, Object.create(null));
Object.keys(hash).sort(function(a,b) {
return a - b;
}).map(function(id) {
return hash[id];
});
答案 1 :(得分:0)
这里有一个班轮
var arr = [{
id: 1,
age: 23,
}, {
id: 1,
age: 25,
}, {
id: 2,
age: 230,
}, {
id: 2,
age: 255,
}, {
id: 3,
age: 232,
}, {
id: 1,
age: 215,
}],
lut = {},
res = arr.sort((a,b) => b.age - a.age).filter(o => lut[o.id] ? false : lut[o.id] = true).sort((a,b) => a.id - b.id);
document.write("<pre>" + JSON.stringify(res,null,2) + "</pre>");
&#13;
答案 2 :(得分:0)
您通常会将Activity1.onCreate
与filter
一起用于remove duplicate elements from an array。在数组元素是对象的情况下,您可以使用findIndex
按某些给定的属性值搜索元素的索引。
indexOf
此外,您需要注意其浏览器支持。
答案 3 :(得分:0)
或以这种方式避免使用lodash的uniq()方法:
arr.sort(function(a,b){
return b.id > a.id;
}).reverse();
var max = arr.length;
var i = 0;
while(i < max - 1){
if (arr[i].id === arr[i+1].id) arr.splice(i+1,1);
else i++
max = arr.length;
}
答案 4 :(得分:0)
您可以使用vanillaJS进行排序。
function sortByAgeDesc(a,b) {return a.age > b.age ? -1 : a.age === b.age ? 0 : 1;}
output = input.sort(sortByAgeDesc);
现在问题是你只想要不同的ID。