所以我有一个掷骰子的功能。我想掷2个骰子20次,每次掷骰子时,我想将这些数字相加,然后我想看看总和出现了多少次,并将该数字放入一个数组中。
function Dice() {
this.roll = function() {
var randomValue = Math.ceil(Math.random() * 6);
this.side = randomValue;
return this.side;
}
}
var dice1 = new Dice();
var dice2 = new Dice();
function getAmount() {
var finalArray = [];
function diceSum() {
var sum = dice1.roll() + dice2.roll();
return sum;
}
var trackSum = [];
for (var i = 1; i <= 20; i++) {
trackSum.push(diceSum());
}
var reduced = trackSum.reduce(function(acc, sum, i, arr) {
return acc.i += sum;
}, {});
return reduced;
}
所以我得到了trackSum
,它在一个数组中有20个数字,每个数字都是掷出的2个骰子的总和。如果 sum = 2
出现 5 次,sum = 4
出现 2 次,sum = 3
出现 1 次,最终数组应该看起来像
[5, 2, 1]
到目前为止,我尝试了 reduce
方法、filter
和 forEach
。我只是不知道如何比较这些数字来看看它出现了多少次。任何帮助,将不胜感激。谢谢!
最佳答案
使用一个对象,其键是总和,值是总和出现的次数。循环遍历 trackSum
并递增相应元素的值。
var freq = {};
trackSum.forEach(function(sum) {
freq[sum] = freq[sum] ? freq[sum] + 1 : 1;
}
console.log(freq);
关于javascript - 计算数字在数组中出现的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42962659/