首页 > 解决方案 > 根据其他数组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"]

基本上,另一个数组必须使用与数据数组排序相同的模式进行排序(数字升序)

标签: javascriptarrayssorting

解决方案


您可以使用该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)


推荐阅读