Javascript在排序函数中同步2个或更多数组

时间:2016-09-08 07:37:02

标签: javascript arrays sorting

我有2个或更多阵列

var Arr1 = [1,1,3,2];
var Arr2 = [a,b,c,d];

我们的想法是对第一个数组进行排序,即主数组,我想在第二个数组上反映新的排序,所以结果很好

var Arr1 = [1,1,2,3];
var Arr2 = [a,b,d,c];

有任何命令以“快速”的方式做到这一点吗?

4 个答案:

答案 0 :(得分:4)

压缩它们,排序它们,解压缩它们。非常简单的Javascript:

var zip = [];
for (var i = 0; i < Arr1.length; i++) {
    zip.push([Arr1[i], Arr2[i]]);
}

zip.sort(function (a, b) { return a[0] - b[0]; });

for (var i = 0; i < zip.length; i++) {
    Arr1[i] = zip[i][0];
    Arr2[i] = zip[i][1];
}

答案 1 :(得分:1)

您可以将索引用作临时数组,并使用arr1的值对其进行排序。然后将结果映射到arr2

&#13;
&#13;
var arr1 = [1, 1, 3, 2],
    arr2 = ['a', 'b', 'c', 'd'],
    indices = arr1.map(function (_, i) { return i; });

indices.sort(function (a, b) { return arr1[a] - arr1[b]; });
arr2 = indices.map(function (a) { return arr2[a]; });

console.log(arr2);
&#13;
&#13;
&#13;

ES6

&#13;
&#13;
var arr1 = [1, 1, 3, 2],
    arr2 = ['a', 'b', 'c', 'd'];

arr2 = arr1
    .map((_, i) => i)
    .sort((a, b) => arr1[a] - arr1[b])
    .map(a => arr2[a]);

console.log(arr2);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

如果你使用下划线,你可以尝试这个想法:

var sorted =_.map(new Array(4), function(i){
    return {
          a:Arra1[i],
          b:Arr2[i]
}
}).sort(function(item){return item.a; })

或者js

var sorted = new Array(4).map(function(item,index){
return {
              a:Arra1[i],
              b:Arr2[i]
    }
};
sorted.sort(function(p,b){ return p.a-b.a;})

Arr1 = sorted.map(function(item){return item.a});
Arr2 = sorted.map(function(item){return item.b});

答案 3 :(得分:0)

假设两个阵列是Arr1,Arr2并且它们具有相同的长度:
1)组合两个阵列:

var combined = [];
for (var i = 0; i < Arr1.length; i++) {
  combined.push({'arr1': Arr1[i], 'arr2': Arr2[i]});
}

2)排序:

combined.sort(function(a, b) {
  return a.arr1 < b.arr1; //ascending based on arr1
});

3)分开:

for (var i = 0; i < combined.length; i++) {
  Arr1[i] = combined[i].arr1;
  Arr2[i] = combined[i].arr2;
}