如何按照预定义索引数组对JavaScript嵌套数组进行高效排序
解决方案
核心思路
你需要的是按索引数组的顺序映射原数组元素,JS内置的Array.prototype.map方法可以在语法层面省略显式循环,且时间复杂度为最优的O(n),执行效率和你写的forEach循环一致甚至更高(JS引擎对内置方法做了底层优化)。
注意事项
你之前写的forEach代码存在逻辑错误:回调中拿到的i就是indexArr的当前元素值,不需要再嵌套indexArr[i]取值,会导致索引越界或取到错误值。
另外你给出的示例中indexArr是1基索引(即第一个元素序号为1),而JS数组默认是0基索引,取值时需要做减1处理,如果你的实际indexArr是0基的,直接去掉减1逻辑即可。
实现代码
// 适配你给出的1基索引indexArr场景 const sortedArr = indexArr.map(idx => mainArr[idx - 1]); // 如果indexArr本身就是0基索引,用下面的版本即可 // const sortedArr = indexArr.map(idx => mainArr[idx]);
效率说明
- 该方案不需要手写任何循环结构,仅一行代码即可实现需求
- 时间复杂度为
O(n),是该场景下的理论最优效率,不存在更快的实现方案 - 如果需要直接修改原数组而非生成新数组,可以用
sort方法,但sort的时间复杂度为O(n log n),效率远低于map方案,不推荐使用。
内容的提问来源于stack exchange,提问作者Simon Veerman
相关产品推荐
相关产品推荐

