【问题标题】:sort 2 array of object in same time in javascript在javascript中同时对2个对象数组进行排序
【发布时间】:2021-11-20 14:53:37
【问题描述】:

(已更新)。

我正在尝试同时对 2 个对象数组进行排序。

我有一个包含日期的对象数组。

firstArray = [{date: timestamp0 ...},
              {date: timestamp1 ...},
              {date: timestamp2 ...},
              {date: timestamp3 ...},
             ]

我有第二个数组,其长度与第一个数组包含位置 (x,y) 的长度相同。

secondArray = [{x: number0 ..., y: number0},
              {x: number0 ..., y: number0},
              {x: number0 ..., y: number0},
              {x: number0 ..., y: number0},
              ]

第一个数组中的每个对象都与第二个数组中的对象相关,这意味着:

firstArray[0]secondArray[0] 相关,并且对所有人都相同。

对第一个数组排序后,输出为(示例):

firstArray = [{date: timestamp3 ...},
              {date: timestamp1 ...},
              {date: timestamp2 ...},
              {date: timestamp0 ...},
             ]

我想将secondArray 排序为与firstArray 相同,因为正如我所说的每个对象都是相关的。

如何按照与第一个数组相同的顺序对第二个数组进行排序?

排序firstArray:

firstArray.sort(function (a, b) {
  return new Date(b.date) - new Date(a.date);
});

【问题讨论】:

  • 我更新了我的问题。

标签: javascript arrays sorting mergesort


【解决方案1】:

基本上获取索引,根据需要排序并将值映射到新数组。

const
    array1 = [], // given data
    array2 = [], // given data
    indices = [...array1.keys()].sort((a, b) => array1[a] - array1[b]), // or other sorting callback
    sortedArray1 = indices.map(i => array1[i]),
    sortedArray2 = indices.map(i => array2[i]);
    
console.log(sortedArray1); // sorted array1
console.log(sortedArray2); // sorted array2

【讨论】:

  • 您能解释一下这是如何工作的吗?这很神奇。
【解决方案2】:

在排序前添加原始索引:

const firstArray = [
{ date: "12/12/2021" }, 
{ date: "12/11/2021" },
{ date: "12/13/2021" },
{ date: "12/3/2021"  }];

firstArray.forEach((item, i) => item.orgIdx = i)
console.log(firstArray)

firstArray.sort((a,b)=> new Date(a.date)- new Date(b.date))
console.log(firstArray)


const secondArray = [
{ x: "number12" },
{ x: "number11" },
{ x: "number13" },
{ x: "number3"  }];

const secondArrSorted = new Array(secondArray.length)
firstArray.forEach(({orgIdx},i) => secondArrSorted[i] = secondArray[orgIdx]);
console.log(secondArrSorted)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 2019-01-08
    • 2012-05-02
    • 2015-03-16
    • 2022-06-17
    • 1970-01-01
    相关资源
    最近更新 更多