簡體   English   中英

二維數組未排序

[英]Two-dimensional array does not get sorted

我有一個數組,看起來像:

[
  ["A","B","C","D"],
  ["E","F","G","H"],
  [6,43,2,4]
]

我想按第三行中項目的降序對數組進行排序,使其看起來像:

[
  ["B","A","D","C"],
  ["F","E","H","G"],
  [43,6,4,2]
]

到目前為止,這是我寫的:

 var arr = [ ["A","B","C","D"], ["E","F","G","H"], [6,43,2,4] ] arr = arr.sort((a,b) => { return b[2] - a[2] }); console.log(arr); 

但是數組沒有排序。 我哪里做錯了?

您可以采用數組的索引進行排序,按原始數組的值對該數組進行排序,然后映射所有重新排序的項。

 var array = [["A", "B", "C", "D"], ["E", "F", "G", "H"], [6, 43, 2, 4]], indices = [...array[2].keys()].sort((a, b) => array[2][b] - array[2][a]); array = array.map(a => indices.map(i => a[i])); console.log(array.map(a => a.join(' '))); 

您需要首先對數字存儲索引進行排序,然后對其他數組進行排序。

 var arr = [ ["A","B","C","D"], ["E","F","G","H"], [6,43,2,4] ] var tmp = arr[2].map((value, i) => ({value, i})).sort((a, b) => b.value - a.value); arr = arr.map(function(arr) { return tmp.map(({value, i}) => arr[i]); }); console.log(arr); 

您想對列進行排序。 對行進行排序更容易。 因此,您可以轉置然后排序然后重新轉置

const arr = [
  ["A","B","C","D"],
  ["E","F","G","H"],
  [6,43,2,4]
];

const transpose = array => array[0].map((col, i) => array.map(row => row[i]));

const t = transpose(arr);
t.sort((rowi,rowj) => (rowj[rowj.length - 1] - rowi[rowi.length-1]));
console.log(transpose(t));

其預期輸出為:

[ [ 'B', 'A', 'D', 'C' ],
  [ 'F', 'E', 'H', 'G' ],
  [ 43, 6, 4, 2 ] ]

顯然,這沒有其他答案那么有效,但是您所提出的問題表明,當前存儲數據的方式並不適合您的目的。 也許您可能想轉置然后跳過重新轉置的部分。

如果您可以用不同的方式描述數據,那會更容易。 Array.sort函數將無法幫助您使用當前示例。

 var arr = [{ a: "A", b: "E", c: 6 },{ a: "B", b: "F", c: 43 },{ a: "C", b: "G", c: 2 },{ a: "D", b: "H", c: 4 }] arr.sort((a, b) => { return bc - ac; }) console.log(arr); 

如果不能,我可以提供不同的答案。 但是答案將非常低效。

暫無
暫無

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

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