[英]Sort an array based on multiple objects' value
我有一个看起来像这样的数组:
{ username: 'usernameadw',
rank: 'rookie',
points: 891
},
{ username: 'username662',
rank: 'rookie',
points: 999
},
{ username: 'usernameabd8a',
rank: 'knight',
points: 2393
},
{ username: 'usernamev88',
rank: 'mage',
points: 1673
},
{ username: 'abcusername123',
rank: 'mage',
points: 1483
}
我想知道如何将这些数组拆分为“mageArray”、“knightArray”、rookieArray“之类的数组,然后对每个数组,按每个对象从最高到最低的点数对它们进行排序?
到目前为止,我已经尝试使用此代码,但它不起作用。 我试图做的是从包含信息的大数组中创建一个新对象,然后如果排名名称匹配,则将其推送到另一个数组
var obj = new Object({
username: usersRows[i].username,
rank: usersRows[i].rank,
points: usersRows[i].points
});
if (usersRows[i].rank === 'mage') { mageArray.push(obj); }
尝试这个。
const usersRows = [{
username: 'usernameadw',
rank: 'rookie',
points: 891
},
{
username: 'username662',
rank: 'rookie',
points: 999
},
{
username: 'usernameabd8a',
rank: 'knight',
points: 2393
},
{
username: 'usernamev88',
rank: 'mage',
points: 1673
},
{
username: 'abcusername123',
rank: 'mage',
points: 1483
}];
function makeSortMap(usersRows) {
const sortMap = {};
for(row of usersRows) {
const key = row.rank;
if(!sortMap[key]) {
sortMap[key] = [];
}
sortMap[key].push(row);
}
for(r in sortMap) {
sortMap[r].sort((a, b) => b.points - a.points);
}
return sortMap;
}
makeSortMap(usersRows);
排序参考: 按值排序对象属性
首先让我们使用以下命令将主数组分解为三个子数组:
var users = [{ username: 'usernameadw',
rank: 'rookie',
points: 891
},
{ username: 'username662',
rank: 'rookie',
points: 999
},
{ username: 'usernameabd8a',
rank: 'knight',
points: 2393
},
{ username: 'usernamev88',
rank: 'mage',
points: 1673
},
{ username: 'abcusername123',
rank: 'mage',
points: 1483
}];
var rookieArray = [];
var knightArray = [];
var mageArray = [];
// split users into category arrays.
for (i=0; i<users.length; i++) {
if (users[i].rank === 'rookie') {
rookieArray.push(users[i]);
}
if (users[i].rank === 'knight') {
knightArray.push(users[i]);
}
if (users[i].rank === 'mage') {
mageArray.push(users[i]);
}
}
一旦我们有了它,我们只需要使用 array.sort 和比较函数对数字进行排序,如下所示:
// sort the rookies array
rookieArray.sort(function(a, b) {
return b.points - a.points;
});
knightArray.sort(function(a, b) {
return b.points - a.points;
});
mageArray.sort(function(a, b) {
return b.points - a.points;
});
关于 for 循环的一个很好的参考在这里: https : //www.w3schools.com/js/js_loop_for.asp
关于 array.sort 的一个很好的参考在这里: https ://www.w3schools.com/js/js_array_sort.asp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.