JS自定义数组排序:实现子数组关联排序需求
解决方案
要实现让test[1]跟随test[0]排序后的原索引取值,核心是保留两个数组元素的原始对应关系——不能直接单独排序第一个数组(会丢失原始索引的关联)。具体实现步骤如下:
先将两个数组的对应索引元素配对,形成新的二维数组,每个子数组包含原数组对应位置的两个元素:
// 配对原数组的对应元素 const paired = test_array[0].map((num, index) => [num, test_array[1][index]]);这一步会得到:
[[98,10], [6,20], [54,30], [32,40]]按照配对数组中每个子数组的第一个元素(即原
test_array[0]的元素)从小到大排序:paired.sort((a, b) => a[0] - b[0]);排序后配对数组变为:
[[6,20], [32,40], [54,30], [98,10]]分别提取排序后配对数组的第一列和第二列到
test数组中:test[0] = paired.map(item => item[0]); test[1] = paired.map(item => item[1]);
完整代码
let test_array = [[98,6,54,32],[10,20,30,40]]; var test = [[],[]]; // 配对元素并排序 const paired = test_array[0].map((num, idx) => [num, test_array[1][idx]]); paired.sort((a, b) => a[0] - b[0]); // 拆分到test数组 test[0] = paired.map(i => i[0]); test[1] = paired.map(i => i[1]); console.log(test[0]); // [6,32,54,98] console.log(test[1]); // [20,40,30,10]
关键说明
直接对test_array[0].sort(...)会修改原数组的顺序,同时丢失原始索引与test_array[1]元素的对应关系,导致无法正确关联第二个数组的元素。通过先配对再排序的方式,能始终保持两个数组元素的原始对应关系,排序后拆分即可得到需求结果。
内容的提问来源于stack exchange,提问作者Gerardo Scoppetta
相关产品推荐
相关产品推荐

