基于另一数组排序规则实现数组同步排序
同步排序两个关联数组的简洁方案
实现思路
将两个数组的对应索引元素绑定成配对结构,排序后再拆分回原数组,从根源上避免indexOf()处理重复元素时的匹配错误问题。
代码实现
const arr1 = [4,2,3,5,1]; const arr2 = ['a','b','c','d','e']; // 把两个数组的对应元素配对 const pairedItems = arr1.map((num, idx) => [num, arr2[idx]]); // 按arr1的元素从小到大排序配对后的数组 pairedItems.sort((itemA, itemB) => itemA[0] - itemB[0]); // 拆分回两个独立数组 const sortedArr1 = pairedItems.map(item => item[0]); const sortedArr2 = pairedItems.map(item => item[1]); console.log(sortedArr1); // 输出: [1,2,3,4,5] console.log(sortedArr2); // 输出: ['e','b','c','a','d']
关键说明
- 用
map建立配对关系时,每个元素的对应索引被永久绑定,不受排序影响 - 排序仅针对配对后的数组的第一个元素(即原arr1的数值),排序逻辑和原生
sort一致,无需手动实现排序算法 - 即使arr1存在重复元素,配对结构也能保证arr2的元素始终和原arr1的对应元素绑定,不会出现匹配错位
内容的提问来源于stack exchange,提问作者Michael Chen
相关产品推荐
相关产品推荐

