簡體   English   中英

如何基於Javascript中的第一個數組對二維數組進行排序

[英]How to sort two dimensional array based on first array in Javascript

所以,我有這個數組:

distances = [[Obj1, Obj2, Obj3, Obj4], [15,221,9,2]];

我想基於第二個數組對二維數組進行排序,因此它應如下所示:

distances = [[Obj4, Obj3, Obj1, Obj2], [2, 9, 15, 221]];

我知道我可以使用這種方法: 如何按列值對二維數組排序? ,但我似乎無法改編代碼。

首先,一個效率不高的解決方案是將數組轉置為匹配您在問題中鏈接的解決方案的布局。

var temp = [];
for(var i in distances[0])
  temp[i] = ([distances[0][i], distances[1][i]]);

然后進行排序並將其轉換回其先前的形式:

distances = [[], []];
for (var i in temp) {
  distances[0][i] = temp[i][0];
  distances[1][i] = temp[i][1];
}

您可以使用臨時數組作為排序順序,並將其應用於兩個distances數組。

 var distances = [['Obj1', 'Obj2', 'Obj3', 'Obj4'], [15, 221, 9, 2]], order = distances[0].map(function (_, i) { return i; }); order.sort(function (a, b) { return distances[1][a] - distances[1][b]; }); distances[0] = order.map(function (i) { return distances[0][i]; }); distances[1] = order.map(function (i) { return distances[1][i]; }); console.log(distances); 

var sorted = distances[1].map(function (v, i) { 
   return {v:v,i:i,o:distances[0][i]} }).
      sort(function (a,b) { return a.v - b.v});
distances[0] = sorted.map(function (x) { return x.o });
distances[1] = sorted.map(function (x) { return x.v });

 var distances = [["Obj1", "Obj2", "Obj3", "Obj4"], [15,221,9,2]]; var NewDistances = []; for (var i = 0; i < distances[0].length; i++) NewDistances[i] = { Obj: distances[0][i], Key: distances[1][i] }; NewDistances.sort(function(O1, O2) { return O1.Key < O2.Key ? -1 : (O1.Key > O2.Key ? 1 : 0); }); var Result = [[],[]]; for (var i = 0; i < NewDistances.length; i++) { Result[0][i] = NewDistances[i].Obj; Result[1][i] = NewDistances[i].Key; } console.log(Result); 

暫無
暫無

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

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