计算数组的平均/最小值/最大值



我有一组5个人的数据。数据是:"#ofKeys","首选板条箱","Round1Results","Round2Results","Round2Results">

我想要的是数据以某种形式的 2D 数组形式出现,以便它涵盖所有 5 名玩家的所有信息。

然后,我希望数据记录每个玩家 3 轮的平均值,以及每个玩家得到的最佳和最差结果。

我真的不确定如何处理这个问题,所以任何帮助将不胜感激。

到目前为止,我真正所做的只是制作了一些项目,如下所示:

var playerdata = [[2, Assault, 1,1,10],
                  [0, Support, 3,2,11],
                  [1, Assault, 7,12,1],
                  [0, Assault, 5,9,14],
                  [0, Assault, 11,17,18]];

当您询问更多轮次结果时,您可以将索引 2 中的数组视为轮次的数据。

var playerdata = [[2, 'Assault', 1, 1, 10], [0, 'Support', 3, 2, 11], [1, 'Assault', 7, 12, 1], [0, 'Assault', 5, 9, 14], [0, 'Assault', 11, 17, 18]],
    result = playerdata.map(player => {
        const data = player.slice(2);
        return {
            player,
            average: data.reduce((a, b) => a + b) / data.length,
            best: Math.max(...data),
            worst: Math.min(...data)
        };
  });
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

您可以映射playerdata数组并计算每个玩家的平均/最佳/最差:

var playerdata = [[2, 'Assault', 1,1,10],
                  [0, 'Support', 3,2,11],
                  [1, 'Assault', 7,12,1],
                  [0, 'Assault', 5,9,14],
                  [0, 'Assault', 11,17,18]];
                  
var calculated = playerdata.map((player) => {
  const rounds = player.slice(2);
  
  return {
    player,
    average: average(rounds),
    best: Math.max(...rounds),
    worst: Math.min(...rounds)
  };
});
function average(numbers) {
  return numbers.reduce((a, b) => a + b, 0) / numbers.length;
}
console.log(calculated);
console.log('Player 1 average', calculated[0].average);

对我来说最有意义的是将数据映射到每个玩家的对象中,如下所示:

此解决方案利用:

Array.prototype.map()(用于映射到对象数组(

Array.prototype.reduce()(用于一般对舍入数据求和(

ES6 扩散语法(用于收集/展开轮次数据(

ES6 解构赋值(用于轻松地将玩家数据提取到局部变量中(

ES6 查找(用于按属性值从数组中提取单个对象(

var playerdata = [[2, "Assault", 1,1,10],
                  [0, "Support", 3,2,11],
                  [1, "Assault", 7,12,1],
                  [0, "Assault", 5,9,14],
                  [0, "Assault", 11,17,18]];
                  
var mapped = playerdata.map(function (arr, index) {
    // Extract player data from array through Destructuring
    // Same as var NumberOfKeys = arr[0], PreferredCrate = arr[1], etc.
    // gather the rest of the arr elements as rounds data
    var [NumberOfKeys, PreferedCrate, ...rounds] = arr;
    
    // return an object with the data we want back
    return {
        PlayerName: "Player " + (index + 1),
        NumberOfKeys,
        PreferedCrate,
        NumberOfRounds: rounds.length,
        BestResult: Math.max(...rounds),
        WorstResult: Math.min(...rounds),
        Average: rounds.reduce((total, round) => total + round) / 3
    };
});
function getPlayerAverage(playerName, data) {
  // find a player by PlayerName (can be done with any property on the player object)
  var playerData = data.find(player => playerName === player.PlayerName);
  // if player is found, return the average, else return "N/A"
  return playerData ? playerData.Average : "N/A";
}
console.log("Player 1 average: ", getPlayerAverage("Player 1", mapped));
console.log("Player 99 average: ", getPlayerAverage("Player 99", mapped));
console.log("--- mapped data ---");
console.log(mapped);

最新更新