我有一组5人的数据。数据如下: “#ofKeys”, “PreferedCrate”, “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]];
答案 0 :(得分:2)
当您询问更多圆形结果时,您可以将索引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; }

答案 1 :(得分:1)
您可以映射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);
答案 2 :(得分:1)
对我来说最有意义的是将数据映射到每个玩家的对象中,如下所示:
此解决方案使用:
Array.prototype.map()
(用于映射到对象数组)
Array.prototype.reduce()
(通常用于汇总轮次数据)
ES6 Spread Syntax(用于收集/传播轮次数据)
ES6 Destructuring Assignment(用于轻松将玩家数据提取到局部变量中)
ES6 Find(用于按属性值从数组中提取单个对象)
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);