【问题标题】:How to sort javascript array following a predetermined hierarchy [duplicate]如何按照预定的层次结构对javascript数组进行排序[重复]
【发布时间】:2020-11-16 10:52:14
【问题描述】:

假设我有这个层次结构:

0 King
1 Queen
2 Tower
3 Bishop
4 Knight
5 Pawn

还有一个包含这些元素的数组:

array = [Tower, Pawn, Bishop, Queen]

如何按照层次结构对其进行排序?

array = [Queen, Tower, Bishop, Pawn]

【问题讨论】:

  • 你尝试了什么?
  • 你可以使用Array.sort(sortingFunction)

标签: javascript arrays sorting


【解决方案1】:

创建一个定义层次结构的对象:

const hierarchyMap = {
  King: 0,
  Queen: 1,
  Tower: 2,
  Bishop: 3,
  Knight: 4,
  Pawn: 5,
}

然后根据层次值对数组进行排序:

array.sort((first, second) => hierarchyMap[first] - hierarchyMap[second]);

反之亦然:

array.sort((first, second) => hierarchyMap[second] - hierarchyMap[first]);

const hierarchyMap = {
  King: 0,
  Queen: 1,
  Tower: 2,
  Bishop: 3,
  Knight: 4,
  Pawn: 5,
}


let array = ["Tower", "Pawn", "Bishop", "Queen"];

let sorted = array.sort((first, second) => hierarchyMap[first] - hierarchyMap[second]);

console.log(sorted)

【讨论】:

    【解决方案2】:

    你排序。然后你映射过去。

    我建议将数组与对象一起使用。也许您想在以后添加更多属性,以便轻松添加更多属性。

    let data = [
      {pos:5, role:"King"},
      {pos:6, role:"Queen"},
      {pos:4, role:"Tower"},
      {pos:2, role:"Bishop"},
      {pos:3, role:"Knight"},
      {pos:1, role:"Pawn"}
    ]
    
    let result = data.sort((a,b) => a.pos - b.pos)
                 .map(({role}) => role);
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 2016-05-21
      • 1970-01-01
      • 2013-09-16
      • 2022-01-08
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多