javascript - 在javascript中对一个子数组进行排序时如何更改多维数组中的顺序?
问题描述
当我对一个子数组进行排序时,如何根据排序子数组的新顺序更改其他子数组元素的顺序:
var op = [];
op[0] = [0, "1:7001", "1:7002", "1:7003", "1:7004", "1:7005"];
op[1] = [1, "1:8001", "1:8002", "1:8003", "1:8004", "1:7005"];
op[2] = ["asw", 3, 5, 1, 10, 2];
op[2] = op[2].slice(0, 1).concat(op[2].slice(1, op[2].length).sort(function(a,b) {
return b - a;
}));
console.log(op);
预期的数组应如下所示:
[0, "1:7004", "1:7002", "1:7001", "1:7005", "1:7003"];
[1, "1:8004", "1:8002", "1:8001", "1:7005", "1:8003"];
[ "asw", 10, 5, 3, 2, 1 ]
解决方案
您可以使用具有值和索引对象的临时数组进行排序,并将其他数组映射到已排序数组的索引。
这种方法称为使用 map 排序。
var op = [
[0, "1:7001", "1:7002", "1:7003", "1:7004", "1:7005"],
[1, "1:8001", "1:8002", "1:8003", "1:8004", "1:7005"],
["asw", 3, 5, 1, 10, 2]
],
order = op[2] // take op[2] as pattern
.slice(1) // omit first element
.map((v, i) => ({ v, i: i + 1 })) // take value and index with offset
.sort(({ v: a }, { v: b }) => b - a); // sort by value desc
order.unshift({ i: 0 }); // keep first item at index zero
op = op.map(a => order.map(({ i }) => a[i])); // map value at index
console.log(op);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- kubernetes - 我可以使用从 pod 中的 init 容器创建的配置映射吗
- datastax-enterprise - 使用 DSE 高级复制与手动多 DC 设置进行灾难恢复之间的区别?
- spring - Spring Boot端口转发80到8080
- rotation - 如何围绕自身边界的中心旋转 UIBezierPath?
- r - 在 ggplot2 中绘制 shapefile:Print() 错误
- java - 异常处理,第一个 try/catch 块在接受正确输入之前不会重复
- google-cloud-stackdriver - 在 StackDriver 中跨 Google Cloud 中的多个项目设置基于日志的警报
- javascript - 与锚一起使用的滚动魔术针
- c++ - SDL2 C++ 未处理异常
- jqgrid - jqGrid,复选框未在编辑表单上左对齐。引导程序