javascript - 根据其他数组js对数组进行排序
问题描述
我有 2 个列表/数组:
[例子]:
let labels = ["John", "Sophie", "Hannah", "Emilia"]
let data = [10, 40, 24, 25]
我想按数据顺序对两个数组进行排序。(每个名称对应于另一个数组中相同索引处的值)。我会使用像 {name: value} 这样的对象,但为了我的需要,它们必须是分开的(至少是结果)。我找到了一个解决方案,但我发现它不是很优雅。
[所需输出示例]:
let data = [40, 25, 24, 10]
let labels = ["Sophie", "Emilia", "Hannah", "John"]
基本上,另一个数组必须使用与数据数组排序相同的模式进行排序(数字升序)
解决方案
您可以使用该zip
函数优雅地执行此操作(另请参见Python 的 zip 函数的 Javascript 等效项)。zip
有一个有趣的特性是它自己的逆,即zip(zip([a, b])) === [a, b]
,所以我们将两个数组压缩为一个,对其进行排序并再次压缩。
let zip = (...a) => a[0].map((_, n) => a.map(b => b[n]))
let labels = ["John", "Sophie", "Hannah", "Emilia"]
let data = [10, 40, 24, 25];
[labels, data] = zip(...
zip(labels, data)
.sort((x, y) => y[1] - x[1])
)
console.log(...labels)
console.log(...data)
推荐阅读
- java - Jenkins 中的 Groovy 脚本 - MultipleCompilationErrorsException
- java - Java 的 toString() 静态或非静态(基于我的示例)
- django - 在 django 中以 python 包的形式集成汗水警报2
- reactjs - 在顶层使用带有上下文 api 的 useSelector 挂钩以提高性能
- matlab - 如何改变点云中平面的位置?
- mongodb - MongoDB Mongoose 在日期范围内选择文档
- javascript - ajax数据表,无法检索数据
- jquery - 请求了不受支持的 HTTP 方法“OPTIONS”,而我设置为 HTTP 方法:“POST”
- laravel - Laravel 嵌套 Foreach 的常见问题视图试图获取非对象的属性
- java - 如何向洋葱服务器发送http请求?