Javascript:基于第一个数组排序结果对多维数组进行排序

Dav*_*rno 5 javascript arrays sorting

我有一个类似于这个的数组设置:

var ary1 = new Array("d", "a", "b", "c");
var ary2 = new Array("ee", "rr", "yy", "mm");

var mdAry = new Array(ary1, ary2);
Run Code Online (Sandbox Code Playgroud)

ary1和ary2索引是在宏观方案中相互关联的信息.

d ee
a rr
b yy
c mm
Run Code Online (Sandbox Code Playgroud)

我可以排序()ary1并得到:

a
b
c
d
Run Code Online (Sandbox Code Playgroud)

但如果我独立排序ary2,我会得到:

ee
mm
rr
yy
Run Code Online (Sandbox Code Playgroud)

在列出时可视地打破ary1和ary2连接.我可以检索ary1的排序解决方案并将其应用于ary2吗?我想得到这个:

a rr
b yy
c mm
d ee
Run Code Online (Sandbox Code Playgroud)

如果没有,可以对mdAry进行排序,以便将mdAry [0]排序解决方案应用于其余的指标吗?

acd*_*ior 0

您可以将它们“合并”为具有两个属性的单个对象,按第一个属性排序,然后最后分开(请参阅此处的演示):

function sortBoth(ary1, ary2) {
    var merged = [];
    for (var i=0; i < ary1.length; i++) merged.push({'ary1': ary1[i], 'ary2': ary2[i]});
    merged.sort(function(o1, o2) { return ((o1.ary1 < o2.ary1) ? -1 : ((o1.ary1 == o2.ary1) ? 0 : 1)); });
    for (var i=0; i < merged.length; i++) { ary1[i] = merged[i].ary1; ary2[i] = merged[i].ary2; }
}

var ary1 = new Array("d", "a", "b", "c");
var ary2 = new Array("ee", "rr", "mm", "yy");

console.log(ary1);
console.log(ary2);

sortBoth(ary1, ary2);

console.log(ary1);
console.log(ary2);
Run Code Online (Sandbox Code Playgroud)

输出:

[ "d",  "a",  "b",  "c"]
["ee", "rr", "mm", "yy"]
[ "a",  "b",  "c",  "d"]
["rr", "mm", "yy", "ee"] 
Run Code Online (Sandbox Code Playgroud)