javascript - 计算数字在数组中出现的时间

标签 javascript arrays object

所以我有一个掷骰子的功能。我想掷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 方法、filterforEach。我只是不知道如何比较这些数字来看看它出现了多少次。任何帮助,将不胜感激。谢谢!

最佳答案

使用一个对象,其键是总和,值是总和出现的次数。循环遍历 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/

相关文章:

javascript map 对象值

javascript - 如何在 JavaScript 中将字符串部分保存在变量中

php - 推送通知没有失败但没有被发送

javascript - 关闭弹出窗口并导航到 jQuery Mobile 中的另一个页面

python - 如何快速找到 2 个不同数组中所有元素对的总和

javascript - 如何从 JavaScript 中的函数将值设置为 n 维数组?

javascript更新对象数组中的所有值

javascript - drawImage() 未绘制预加载的图像对象。使用面向对象的javascript

javascript - Polymer - 访问自定义元素内的 DOM 输入元素

javascript - 如何将 JavaScript 日期字符串转换为另一种格式?