javascript - 如何在保留顺序的同时对数组进行排序
问题描述
我有一个数组,例如 3,4,3,1,5
按升序或降序排序给出 1,3,3,4,5 或 5,4,3,3,1。
我需要原始订单,例如 3,3,4,1,5
underscoreJs 有 groupBy 方法,但是它将数组分成组。
有任何想法吗?
解决方案
如果要对数组进行就地排序,可以sort
使用优先级对象获取每个项目的优先级
let array = [3, 4, 3, 1, 5],
index = 0,
priority = {};
array.forEach(n => priority[n] = priority[n] || ++index);
array.sort((a, b) => priority[a] - priority[b])
console.log(array)
如果你想要一个新数组,你可以创建一个counter
计算出现次数的对象。然后,根据每个数字的计数创建另一个数组
const
array = [3, 4, 3, 1, 5],
counter = array.reduce((acc, n) => acc.set(n, acc.get(n) + 1 || 1), new Map),
output = Array.from(counter).flatMap(([n, count]) => Array(count).fill(n))
console.log(output)
推荐阅读
- python - Python列表索引超出范围 - 算法
- android - 使用 Serilizable 注释检查响应项的空白值
- machine-learning - 如何明确哪些模型层用于机器学习?
- reactjs - 重定向后反应状态数据未准备好
- python - 如何使用 Socks5 代理 scrapy 请求?
- java - 错误 java.lang.IllegalArgumentException: NamedQuery of name: Employee.findAll not found
- azure - 在 Azure Dev Ops 代理上安装 Az 2.8.0 Powershell 模块
- node.js - REST 命名约定 JOIN
- javascript - 如何在 Kendo react Grid 中同时使用 customCell 和 Reorder?
- java - 在日历视图事件中突出显示数据库中的列表数据