我有 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] 删除。
我来说两句