javascript - 根据另一个数组的排序顺序对数组进行排序的数据结构或过程
问题描述
例如,我将两个数组输入到 Highcharts“系列”参数中:
A = [25, 100, 50, 12]
B = [50, 12, 100, 25]
A和B的顺序对应于图表的Y值,因此如果我将 A排序为升序,则B的顺序必须匹配A的成为:
A = [12, 25, 50, 100]
B = [25, 50, 100, 12]
天真的方法只是实现一个基本的排序算法,它接受 2 个数组,并且对于排序A所采取的每一步,它在B上执行相同的步骤,而忽略它的内容是什么。但这只是感觉有点愚蠢——我认为实现一个将这两个数组中的值关联起来的数据结构,然后允许我对其中一个参数执行排序似乎更明智。
唯一需要注意的是,我需要一个对象/数据结构,然后我可以从中提取这两个数组,以便将其插入到 highcharts 中。此外,我记得读过 JS 规范并没有说普通的 JS 对象需要维护顺序,所以我不确定什么是好的方法。
解决方案
一种选择是,从每个项目中创建一个具有a
和b
属性的对象,对该对象数组进行排序,然后再次将它们提取到它们的组件数组中:
const A = [25, 100, 50, 12];
const B = [50, 12, 100, 25];
const arr = A.map((a, i) => ({ a, b:B[i] }));
arr.sort((item1, item2) => item1.a - item2.a);
const [newA, newB] = arr.reduce(([newA, newB], { a: itemA, b: itemB }) => {
newA.push(itemA);
newB.push(itemB);
return [newA, newB];
}, [[],[]]);
console.log(newA, newB);
虽然这可能看起来更实用,但您的原始实现虽然幼稚,但对于大量输入可能会更快一些,因为它不需要创建中间数组和对象。
推荐阅读
- amazon-web-services - 如何使用 AWS Batch 多节点并行作业实现并行性
- r - 神经网络中的非一致性数组-neuralnet包
- jquery - 如何在将css应用于加载的导航菜单时在html(index.html)中加载html(导航菜单)
- sql - 如何按数字选择每个组的最新日期?
- javascript - 在 NodeJS 中转义多个嵌套函数
- python - 在 matplotlib 的子图中显示 OpenCV 图像
- python - 从另一个脚本调用一个类
- java - 詹金斯:java.lang.IllegalStateException:詹金斯.instance 丢失
- c++ - 头文件 C++
- python - 如何在不使用 Tkinter 的情况下创建警报框?