[英]Sort array of object for some keys in javascript
我有一個對象數組。
[{
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
}]
您可以構建一個哈希,在其中存儲每個 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];
});
這里只有一個班輪
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>");
您通常會使用filter
和indexOf
從數組中刪除重復元素。 在數組元素是對象的情況下,您可以使用findIndex
通過某些給定的屬性值搜索元素的索引。
let result = [{ id: 1, age: 23, }, { id: 1, age: 25, }, { id: 2, age: 230, }, { id: 2, age: 255, }, { id: 3, age: 232, }, { id: 1, age: 215, }].sort((a,b) => b.age - a.age) .filter((row,pos,self) => self.findIndex(item => item.id === row.id) === pos) .sort((a,b) => a.id - b.id); document.body.textContent = JSON.stringify(result);
此外,您需要注意其瀏覽器支持。
或者通過這種方式避免使用 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;
}
您可以使用 vanillaJS 以這種方式進行排序。
function sortByAgeDesc(a,b) {return a.age > b.age ? -1 : a.age === b.age ? 0 : 1;}
output = input.sort(sortByAgeDesc);
現在的問題是你只想要不同的 id。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.