是否可以根据对另一个数组排序得到的排序顺序对一个数组进行排序?

Is this possible to sort one array according to the sorting order obtained by sorting another array?

这里我在javascript代码中有两个数组

const array1 = [200, 455.23, -306.5, 9000, -642.21, -133.9, 79.97, 1300];
const array2 = [
    '2019-11-18T21:31:17.178Z',
    '2019-12-23T07:42:02.383Z',
    '2020-01-28T09:15:04.904Z',
    '2020-04-01T10:17:24.185Z',
    '2022-04-08T14:11:59.604Z',
    '2022-04-10T17:01:17.194Z',
    '2022-04-11T23:36:17.929Z',
    '2022-04-13T10:51:36.790Z',
];
array1.sort((a, b) => a - b);

我希望 array2 的排序顺序与 array1 的排序顺序完全相同。 假设即使在对 array1 进行排序之后,同一索引处的两个数组的每个元素也必须位于同一索引处。简而言之,我想对一个数组进行排序。我希望另一个数组以完全相同的顺序排序。

下面是如何实现上述建议的示例,其中两个值都在一个数组中,就像对象一样,并按数组中每个对象的值排序。

const myArray = [
  {date: '2019-11-18T21:31:17.178Z', value: 200},
  {date: '2019-12-23T07:42:02.383Z', value: 455.23},
  {date: '2020-01-28T09:15:04.904Z', value: -306.5},
  {date: '2020-04-01T10:17:24.185Z', value: 9000},
  {date: '2022-04-08T14:11:59.604Z', value: -642.21},
  {date: '2022-04-10T17:01:17.194Z', value: -133.9},
  {date: '2022-04-11T23:36:17.929Z', value: 79.97 },
  {date: '2022-04-13T10:51:36.790Z', value: 1300},
]

myArray.sort((a, b) => a.value - b.value)
console.log(myArray);

首先创建一个包含值对的对象文字数组。然后使用 sortby 键对该数组进行排序。你完成了!

const array1 = [200, 455.23, -306.5, 9000, -642.21, -133.9, 79.97, 1300];
const array2 = ['2019-11-18T21:31:17.178Z','2019-12-23T07:42:02.383Z','2020-01-28T09:15:04.904Z','2020-04-01T10:17:24.185Z','2022-04-08T14:11:59.604Z','2022-04-10T17:01:17.194Z','2022-04-11T23:36:17.929Z','2022-04-13T10:51:36.790Z',];

const sorted = array1.map((a1,index)=>{return {sortBy: a1, value: array2[index]}}).sort((a,b)=>a.sortBy-b.sortBy);
console.log(sorted);

//-------------------------------------------------------
//or in a function

const sortArrayByAnother = (arr, sortBy) => {
  return sortBy.map((a1,index)=>{return {sortBy: a1, value: arr[index]}}).sort((a,b)=>a.sortBy-b.sortBy).map((d)=>d.value);
}

console.log(sortArrayByAnother(array2, array1));

要对 2 个或更多数组进行排序而不合并它们,请创建一个根据其中一个数组排序的索引数组,然后根据索引数组对数组重新排序。

const array1 = [200, 455.23, -306.5, 9000, -642.21, -133.9, 79.97, 1300];
const array2 = [
'2019-11-18T21:31:17.178Z',
'2019-12-23T07:42:02.383Z',
'2020-01-28T09:15:04.904Z',
'2020-04-01T10:17:24.185Z',
'2022-04-08T14:11:59.604Z',
'2022-04-10T17:01:17.194Z',
'2022-04-11T23:36:17.929Z',
'2022-04-13T10:51:36.790Z',
];

// create array of sorted indexes according to array1
var index = Array.from(Array(array1.length).keys())
          .sort((a, b) => array1[a] < array1[b] ? -1 : (array1[b] < array1[a]) | 0)

// reorder array1, array2, index in place according to index in O(n) time
var i;
var j;
var k;
var t1;
var t2;
for(i = 0; i < index.length; i++){
    if(i != index[i]){
        t1 = array1[i];
        t2 = array2[i];
        k = i;
        while(i != (j = index[k])){
            array1[k] = array1[j];
            array2[k] = array2[j];
            index[k]  = k;
            k = j;
        }
        array1[k] = t1;
        array2[k] = t2;
        index[k] = k;
    }
}
console.log(array1);
console.log(array2);