簡體   English   中英

我有兩個 arrays (1 個數字數組 + 1 個字符串數組)。 我怎樣才能以完全相同的方式對它們進行排序?

[英]I have two arrays (1 Array of numbers + 1 Array of strings). How can I sort them the exact same way?

我有兩個 arrays (1 個數字數組 + 1 個字符串數組)。 他們來了:

陣列#1:

let arrayOne = [0, 0, 1, 1, 2, 3, 4, 4, 4, 5, 7, 7];

陣列#2:

let arrayTwo = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];

我的問題:

我想按降序(從大到小)對數字數組進行排序。 如何在以完全相同的方式對字符串數組進行排序的同時對 arrayOne(數字數組)進行排序?

到目前為止我的代碼:

// Sorted Array
const sortedArray: Array<number> = sortArray(props.data[0], 'Descending');

// Graph Rank Items
const graphRankItems: Array<GraphRankItem> = [
  {
    label: convertMonthAbbreviationToFull(props.labels[props.data[0].indexOf(sortedArray[sortedArray.length - 1])] as MonthAbbreviation),
    value: sortedArray[sortedArray.length - 1].toLocaleString(),
  },
  {
    label: convertMonthAbbreviationToFull(props.labels[props.data[0].indexOf(sortedArray[sortedArray.length - 2])] as MonthAbbreviation),
    value: sortedArray[sortedArray.length - 2].toLocaleString(),
  },
  {
    label: convertMonthAbbreviationToFull(props.labels[props.data[0].indexOf(sortedArray[sortedArray.length - 3])] as MonthAbbreviation),
    value: sortedArray[sortedArray.length - 3].toLocaleString(),
  },
  {
    label: convertMonthAbbreviationToFull(props.labels[props.data[0].indexOf(sortedArray[sortedArray.length - 4])] as MonthAbbreviation),
    value: sortedArray[sortedArray.length - 4].toLocaleString(),
  },
  {
    label: convertMonthAbbreviationToFull(props.labels[props.data[0].indexOf(sortedArray[sortedArray.length - 5])] as MonthAbbreviation),
    value: sortedArray[sortedArray.length - 5].toLocaleString(),
  }
];

我的問題:

我當前的系統是對數組進行排序並在原始數組中找到該數字的索引,然后從arrayTwo中提取字符串。 但是,當存在相同的數字並兩次查找相同的索引時,這會導致問題。 它省略了第二個,第三個等等。

這是一種方法

  1. 將第一個數組映射到包含值和索引的對象數組,然后
  2. 根據值對該數組進行排序,最后
  3. 將結果索引映射到第二個數組的值。

 const a1 = [0, 0, 1, 1, 2, 3, 4, 4, 4, 5, 7, 7]; const a2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']; const result = a1.map((v, i) => ({v, i})).sort((a, b) => bv - av).map(({i}) => a2[i]); console.log(result);

我假設 11 月和 12 月是最大的一面。

如果是這樣:

let arrayTwo = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];

// Sorts array in descending order
// If you want to ascending just interchange a and b.
arrayTwo.sort((a,b) => {
    return arrayTwo.indexOf(b) - arrayTwo.indexOf(a)
})

Array.sort 文檔

暫無
暫無

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

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