基于其他数组js对数组进行排序

JG风格

我有 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函数优雅地执行此操作(另请参阅Javascript 等效于 Python 的 zip 函数)。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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章