簡體   English   中英

排序功能中的Javascript Sync 2或更多數組

[英]Javascript Sync 2 or more array in a sort function

我有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];

有命令以“快速”方式執行此操作嗎?

壓縮,整理,解壓縮。 用非常簡單的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];
}

您可以將索引用作臨時數組,並使用arr1的值對其進行排序。 然后將結果映射到arr2

 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); 

ES6

 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); 

如果使用下划線,則可以嘗試以下方法:

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});

假設兩個數組分別為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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM