问题的本质是我们有一个双精度数组,其中包含每个单独移动的掷骰子过程中出现的名称和数字。您需要找到每位玩家的得分总和并显示得分最高的玩家。
例子:[[name_1, 1,2,3,4],[name_2, 2,3,6,5]]
因此它输出以下内容:[name_2,16]
const data = [
['name_1', 1, 2, 3, 4],
['name_2', 2, 3, 6, 5]
];
const main = (players_data) => {
function alg() {
let arr = [
[]
]
for (let i = 0, i < players_data.length, i++) {
let c = 0
for (let j = 0, j < 5, j++) {
if (j == 0) {
arr.push([players_data[i][0]])
} else {
c = c + (10 - players_data[i][j])
}
}
arr.push([c])
}
arr.forEach(row => row.sort(1));
}
return (arr[0])
};
console.log(main(data)) // expected [name_2,16]
我决定通过使用计算值创建一个新的双精度数组来尝试双精度枚举,然后尝试进行双精度排序。
使用此脚本,您可以运行数组的数组,计算每个嵌套数组的点数,按降序对数组进行排序,并显示具有最大点数的元素(玩家)。
如果有多个玩家具有相同的最大点数,则此代码不考虑选项。
可能在上面的例子中,第一次reduce太多了,所以用.map方法(解决这个问题可能更符合逻辑)
如果您还没有掌握数组方法,这里是使用 for 循环的相同代码
UPD:根据评论,我添加了一个稍微优化的函数,允许您拒绝对数组进行排序
好吧,没有额外的变量