繁体   English   中英

复制数组的顺序,然后对另一个数组进行排序

[英]Copy the order of an array before sorting another array

如何在排序之前从另一个数组复制订单? 我有这个:

function sortNumber(a, b) {
  return a-b;
}
arr2.sort(arr1 order) // here I need to sort the order
arr1.sort(sortNumber);

要使arr2具有与arr1(从其排序状态开始)相同的排列(从其排序状态开始),可以替换为:

arr2.sort(arr1 order)

有:

arr2.sort(sortNumber).splice(0, arr2.length, 
    ...arr1.map((x,i) => [x,i])
           .sort(([a],[b]) => a-b)
           .reduce((acc, [x,i], j) => (acc[i]=arr2[j], acc), [])
);

要求两个数组的长度相同。

听起来您想对数组进行排序,但也可以对该数组或其他数组进行“取消排序” /“还原排序”。 例如,假设您对数组[1, 3, 2] 1,3,2 [1, 3, 2]进行了排序,那么您将希望能够将['a', 'b', 'c']取消排序为['a', 'c', 'b']

该代码段可以帮助您入门,但是请注意,它不能很好地处理重复项(您的描述对于重复项的期望行为是模棱两可的)。

 let sort = (arr, comparator) => { let orig = [...arr]; arr.sort(comparator); let unsort = arr2 => { let sorted = []; arr2.forEach((v, i) => sorted [orig.indexOf(arr[i])] = v); return sorted; }; return {sorted: arr, unsortFunction: unsort}; }; let array = [5, 2, 9, 6]; let array2 = ['two', 'five', 'six', 'nine']; let comparator = (a, b) => a - b; let {sorted, unsortFunction} = sort(array, comparator); let unsorted2 = unsortFunction(array2); console.log(sorted); // 2, 5, 6, 9 console.log(unsorted2); // 'five', 'two', 'nine', 'six' 

您可以获取索引并通过获取数组的值对其进行排序。

 var array = [25, 10, 5], indices = [...array.keys()], sorted; indices.sort((a, b) => array[a] - array[b]); sorted = indices.map(i => array[i]); console.log(indices); console.log(sorted); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM