Javascript,部分重新排序数组

问题描述 投票:0回答:1

对数组进行部分重新排序的最佳方法是什么?

我创建了一个非常基本的示例; 基本上我想使用数组中存储的(索引)对数组(之前)重新排序。

使用代码我有输出:14,21,10,13。 不过,我想将未包含的数组的其余部分按照它们最初出现的顺序添加到新的后数组中。

这将使 after 数组填充如下:14,21,10,13 23,8,15

const before = [23, 21, 14, 12, 10, 8, 15]
const indexes = [2,1,4,0];

const reorderByIndexes = (arr, order) => order.map((index) => arr[index]);

const after = reorderByIndexes(before, indexes);

console.log(after.join());
// 14,21,10,13 23,8,15

我知道在像这样的简单示例中,我可以使用循环来迭代它们,但最终版本设置得更大。

javascript arrays sorting
1个回答
0
投票

我假设你的问题中有一个拼写错误,预期的输出是

14,21,10,23,12,8,15

arr
中索引的位置或索引本身对
order
的索引进行排序。

然后,将索引映射到

arr

的元素

const before = [23, 21, 14, 12, 10, 8, 15]
const indexes = [2,1,4,0];

const reorderByIndexes = (arr, order) => {
  const f = i => {
    let r = order.indexOf(i)
    return r!==-1 ? r : i
  }
  return arr.map((_,i) => i).sort((i,j) => f(i) - f(j)).map(i => arr[i])
}

const after = reorderByIndexes(before, indexes)

console.log(after.join());

© www.soinside.com 2019 - 2024. All rights reserved.