使用纯JavaScript根据一个数组排序结果同步调整另一个数组元素位置
关联数组同步排序解决方案
这其实是个很常见的跨数组关联排序问题,核心就是要把两个数组中同索引位置的元素绑定在一起,这样排序其中一个数组的元素时,另一个数组的对应元素能跟着同步调整。我给你用两种常用语言演示实现思路,其他语言的逻辑也是完全一致的:
JavaScript 实现
// 原始数组 const arr1 = [64, 23, 35, 11, 55]; const arr2 = [34, 10, 54, 12, 4]; // 1. 将两个数组的同索引元素配对,保留关联关系 const pairedItems = arr1.map((val, index) => ({ arr1Val: val, arr2Val: arr2[index] })); // 2. 按照arr1的元素值对配对后的数组排序 pairedItems.sort((a, b) => a.arr1Val - b.arr1Val); // 3. 分别提取排序后的arr1和同步调整后的arr2 const sortedArr1 = pairedItems.map(item => item.arr1Val); const sortedArr2 = pairedItems.map(item => item.arr2Val); console.log('排序后的arr1:', sortedArr1); // 输出: [11, 23, 35, 55, 64] console.log('同步调整后的arr2:', sortedArr2); // 输出: [12, 10, 54, 4, 34]
Python 实现
arr1 = [64, 23, 35, 11, 55] arr2 = [34, 10, 54, 12, 4] # 1. 打包两个数组的同索引元素为元组 paired = list(zip(arr1, arr2)) # 2. 按元组的第一个元素(即arr1的元素)排序 paired.sort() # 3. 拆分排序后的元组,得到两个独立数组 sorted_arr1, sorted_arr2 = zip(*paired) print("排序后的arr1:", sorted_arr1) # 输出: (11, 23, 35, 55, 64) print("同步调整后的arr2:", sorted_arr2) # 输出: (12, 10, 54, 4, 34)
核心逻辑说明
直接单独排序arr1会丢失它和arr2的索引关联,所以我们先把同位置的元素绑定成一个整体(对象或元组),这样排序这个整体时,两个元素的对应关系就不会被破坏。排序完成后再拆分回两个数组,就能得到你想要的同步调整效果。
内容的提问来源于stack exchange,提问作者Anil Poudel
相关产品推荐
相关产品推荐

