Javascript 基于数组对对象数组进行排序

Javascript 基于数组对对象数组进行排序,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我想按照嵌套最多的值,即“结果”和“游戏类型”,对给定数组的顶级对象进行排序。按“游戏类型”排序由用户设置,用户按特定顺序输入值数组,例如[201、202、249]输入长度不固定超出用户给定范围的“游戏类型”将被忽略并推到结果的末尾。按“结果”排序是通过从可用结果中选择最大值来实现的 下面是一个用于排序结果的函数: outcomes => Math.max(...outcomes.sort(({ outcome: a }, { outcome: b }) => a - b).map(

我想按照嵌套最多的值,即“结果”和“游戏类型”,对给定数组的顶级对象进行排序。按“游戏类型”排序由用户设置,用户按特定顺序输入值数组,例如[201、202、249]输入长度不固定超出用户给定范围的“游戏类型”将被忽略并推到结果的末尾。按“结果”排序是通过从可用结果中选择最大值来实现的

下面是一个用于排序结果的函数:

outcomes => Math.max(...outcomes.sort(({ outcome: a }, { outcome: b }) => a - b).map(({ outcome }) => outcome))
这是数组:

[
  {
    "eventId": 513221,
    "games": [
      {
        "gameId": 31313404,
        "gameType": 240,
        "outcomes": [
          {
            "outcome": 1.8
          }, {
            "outcome": 21
          }, {
            "outcome": 2
          }
        ]
      }, {
        "gameId": 31313413,
        "gameType": 201,
        "outcomes": [
          {
            "outcome": 2.1
          }, {
            "outcome": 2.6
          }, {
            "outcome": 4.1
          }
        ]
      }
    ]
  }, {
    "eventId": 513216,
    "games": [
      {
        "gameId": 31314456,
        "gameType": 249,
        "outcomes": [
          {
            "outcome": 1.45
          }, {
            "outcome": 40
          }, {
            "outcome": 2.5
          }
        ]
      }, {
        "gameId": 31314475,
        "gameType": 201,
        "outcomes": [
          {
            "outcome": 1.5
          }, {
            "outcome": 4.55
          }, {
            "outcome": 4.75
          }
        ]
      }
    ]
  }, {
    "eventId": 513263,
    "games": [
      {
        "gameId": 31314398,
        "gameType": 241,
        "outcomes": [
          {
            "outcome": 1.52
          }, {
            "outcome": 2.35
          }
        ]
      }, {
        "gameId": 31314423,
        "gameType": 201,
        "outcomes": [
          {
            "outcome": 1.65
          }, {
            "outcome": 3.9
          }, {
            "outcome": 4.25
          }
        ]
      }
    ]
  }, {
    "eventId": 5132631,
    "games": [
      {
        "gameId": 313143981,
        "gameType": 240,
        "outcomes": [
          {
            "outcome": 1.52
          }, {
            "outcome": 30
          }, {
            "outcome": 2.35
          }
        ]
      }, {
        "gameId": 313144231,
        "gameType": 202,
        "outcomes": [
          {
            "outcome": 1.65
          }, {
            "outcome": 3.9
          }
        ]
      }
    ]
  }, {
    "eventId": 5132632,
    "games": [
      {
        "gameId": 313143912,
        "gameType": 298,
        "outcomes": [
          {
            "outcome": 1.57
          }, {
            "outcome": 2.2
          }
        ]
      }, {
        "gameId": 313144232,
        "gameType": 202,
        "outcomes": [
          {
            "outcome": 1.65
          }, {
            "outcome": 4.11
          }
        ]
      }
    ]
  }
]

您可以将对象作为排序的辅助对象。属性是所需游戏类型的索引和每个游戏的最大结果值

var数据=[{eventId:513221,游戏:[{gameId:31313404,游戏类型:240,结果:[{Output:1.8},{Output:21},{Output:2}]},{gameId:31313413,游戏类型:201,结果:[{Output:2.1},{Output:2.6},{Output:4.1}]}},{eventId:513216,游戏:[{gameId:314456,游戏类型:249,结果:[Output:1.45},{结果:40},{结果:2.5}]},{游戏ID:31314475,游戏类型:201,结果:[{结果:1.5},{结果:4.55},{结果:4.75}]},{事件ID:513263,游戏:[游戏ID:3131314398,游戏类型:241,结果:[结果:1.52},{结果:2.35},{游戏ID:314423,游戏类型:201,结果:[结果:1.65},},{outcome:4.25}]},{eventId:5132631,游戏:[{gameId:313143981,游戏类型:240,结果:[{outcome:1.52},{outcome:30},{outcome:2.35}},{gameId:313144231,游戏类型:202,结果:[{outcome:1.65},{outcome:3.9}]}},{eventId:5132632,游戏:[{gameId:3143912,游戏类型:298,结果:[1.57},{结果:2.2}},{配子ID:313144232,配子类型:202,结果:[{结果:1.65},{结果:4.11}]}, 输入=[201202], order=data.reduceo,{eventId,games}=>{ o[eventId]=游戏 .map{gameType,outlets}=>{index:input.indexOfgameType,max:Math.max…outlets.map{outlets}=>outlets} .filter{index}=>index!==-1 .reducea,b=>a.index 订单[a.eventId]。索引-订单[b.eventId]。索引|| 订单[b.eventId].max-order[a.eventId].max ; 控制台日志数据;
.作为控制台包装{最大高度:100%!重要;顶部:0;}你有没有一个实际的例子,哪个值进入排序?这没有帮助。请添加想要的结果和输入参数进行排序-什么值对结果很重要。在所有可用的gameType 201游戏中,最高的结果是4.75,所以513216 eventId应该排在第一位。第二个是偶数tId 5132633,因为它有201个gameType,最高结果值为4.25。第三个是513221,作为最后一个数组项,它有201个gameType。第四个是eventId 5132632,因为gameType 202的最高值为4.11,高于5132631的3.9。对于上面的示例结果,用户输入将是[201,202]