javascript - 根据多个对象的值对数组进行排序
问题描述
我有一个看起来像这样的数组:
{ 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);
排序参考:按值对对象属性进行排序
推荐阅读
- javascript - 请帮助我理解这个递归问题
- elasticsearch - Elasticsearch:给长标题更高的分数
- python - Else 语句未使用字符串或浮点输入执行
- c# - 如何在 mvc 视图中获取会话对象
- botframework - 重新启动机器人后,主动消息在 MS Teams 中不起作用
- sql-server - SQL Server 2014 中的 MASSIVE Identity 列值跳跃
- postgresql - 需要帮助合并重叠的时间间隔
- postman - 在 Postman 集合中,其中一项服务只需要调用一次
- apache-spark - Pyspark ModuleNotFoundError:没有名为“mmlspark”的模块
- logstash - Logback-classic 通过不同的依赖与 SLF4J 发生冲突