2016-09-08 7 views
1

私はアイデアがマスター1であるものである第一の配列を、並べ替えることであり、私は反映したい2以上の配列Javascriptの同期2以上の配列

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

をしました2番目の配列の新しい並べ替え、結果はよくなるので

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

「すばやく」する方法はありますか?

+0

'.sort'方法が唯一の存在です。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort –

答えて

4

ジップ 'em、sort' em、unzip 'em。

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]; 
} 
+0

Tnx、正常に動作します。最後は一種の行列です。 –

0

あなたは、アンダースコアを使用している場合、あなたはこのアイデアを試すことができます:非常にプレーンJavaScriptでは

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

やJS

二つの配列がARR1、ARR2であり、彼らが持っていると仮定し
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}); 
0

同じ長さ:
1)2つの配列を組み合わせる:

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

関連する問題