NodeJS 在JS中排序二维数组

wmtdaxz3  于 2022-11-22  发布在  Node.js
关注(0)|答案(4)|浏览(210)

我有一个这样的数组:

const arr = [['Dog', 'Cat', 'Fish', 'Bird'],[1, 4, 2, 3]];

我该如何排序,使其符合以下顺序:

const arr = [['Dog', 'Fish', 'Bird', 'Cat'],[1, 2, 3, 4]];
vwhgwdsa

vwhgwdsa1#

zip它们,排序,然后再次zip

let zip = args => args[0].map((_, i) => args.map(a => a[i]))

//

const arr = [['Dog', 'Cat', 'Fish', 'Bird'],[1, 4, 2, 3]];

r = zip(zip(arr).sort((x, y) => x[1] - y[1]))

console.log(r)
juud5qan

juud5qan2#

const sort = ([ items, indices ]) => {
  const indexMap = items.reduce((map, item, index) => 
    map.set(item, indices[index])
  , new Map);
  return [
    items.sort((a, b) => indexMap.get(a) - indexMap.get(b)),
    indices.sort()
  ];
}

console.log( sort([['Dog', 'Cat', 'Fish', 'Bird'], [1, 4, 2, 3]]) );
h22fl7wq

h22fl7wq3#

确保索引数组包含从1到n的所有数字:

function deepSort(arr2d) {
  const [stringArr, indexArr] = arr2d
  const result = []
  indexArr.forEach((index, i) => result[index - 1] = stringArr[i])
  return [result, indexArr.sort()]
}
2hh7jdfx

2hh7jdfx4#

您可以对索引数组进行排序,并根据索引数组Map值。
第一个

相关问题