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

时间:2019-05-02 20:41:41

标签: javascript

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

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

3 个答案:

答案 0 :(得分:1)

要使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 :(得分:1)

听起来您想对数组进行排序,但也可以对该数组或其他数组进行“取消排序” /“还原排序”。例如给定对数组[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'

答案 2 :(得分:1)

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

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