首页 > 解决方案 > 根据另一个数组的排序顺序对数组进行排序的数据结构或过程

问题描述

例如,我将两个数组输入到 Highcharts“系列”参数中:

A = [25, 100, 50, 12]
B = [50, 12, 100, 25]

AB的顺序对应于图表的Y值,因此如果我将 A排序为升序,则B的顺序必须匹配A的成为:

A = [12, 25, 50, 100]
B = [25, 50, 100, 12]

天真的方法只是实现一个基本的排序算法,它接受 2 个数组,并且对于排序A所采取的每一步,它在B上执行相同的步骤,而忽略它的内容是什么。但这只是感觉有点愚蠢——我认为实现一个将这两个数组中的值关联起来的数据结构,然后允许我对其中一个参数执行排序似乎更明智。

唯一需要注意的是,我需要一个对象/数据结构,然后我可以从中提取这两个数组,以便将其插入到 highcharts 中。此外,我记得读过 JS 规范并没有说普通的 JS 对象需要维护顺序,所以我不确定什么是好的方法。

标签: javascriptarrayssorting

解决方案


一种选择是,从每个项目中创建一个具有ab属性的对象,对该对象数组进行排序,然后再次将它们提取到它们的组件数组中:

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);

虽然这可能看起来更实用,但您的原始实现虽然幼稚,但对于大量输入可能会更快一些,因为它不需要创建中间数组和对象。


推荐阅读