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

我创造了一个非常基本的例子; 基本上,我想使用存储在数组中的(索引)重新排序数组(之前).

使用代码我有输出:14,21,10,13. 然而,我希望保留数组中未包含的剩余部分,按照它们最初出现的顺序添加到新的after数组中.

这将使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

我知道在一个简单的例子中,我可以使用一个循环来遍历它们,但最终版本设置得更大.

推荐答案

我假设你的问题中有一个错别字,预期输出是14,21,10,23,12,8,15

按索引在order中的位置排序,或按索引本身+order.length排序.

我们加order.length,这样order中索引1的东西出现在arr中索引0的东西之前.

然后,将索引映射到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 + order.length
  }
  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());

Javascript相关问答推荐

如何按预期聚合SON数据?

禁用从vue.js 2中的循环创建的表的最后td的按钮

React Native平面列表自动滚动

如何在不分配整个数组的情况下修改包含数组的行为主体?

使用json文件字符串来enum显示类型字符串无法按照计算的enum成员值的要求分配给类型号

使用续集和下拉栏显示模型属性

通过嵌套模型对象进行Mongoose搜索

将现场录音发送到后端

在HTML语言中调用外部JavaScript文件中的函数

如何在箭头函数中引入or子句?

为什么可选参数的顺序会导致问题?

按下单键和多值

自定义图表工具提示以仅显示Y值

令牌JWT未过期

在JavaScript中将Base64转换为JSON

使用可配置项目创建网格

使用python,我如何判断一个html复选框是否被隐藏,以及它是否被S选中?

react :图表负片区域不同 colored颜色

Reaction路由v6.4+数据API:重试加载程序而不显示错误

如何从嵌套的json中获取最大值