排序并打印随机数出现的次数

Sort and print number of occurences of random numbers

const randomNum = [];

for (let i = 0; i <= 20; i += 1) {
  randomNum.push(Math.floor(Math.random() * 20 + 1));
}

然后

function getOccurrence(array, value) {
  return array.filter((x) => x === value).length;
}

我的目标是打印出类似于

的内容
Number 1, 6, 12, 3, 9 occurred 1 times.
Number 2, 5, 7, 19, 17 occurred 2 times.
Number 15, 11 occurred 3 times. 

以此类推

知道我应该怎么做吗?

我正在考虑制作一个功能,类似于

function numberOccurrence(arr, arrLength){

}

所以我将来可以为它提供任何包含 x 个数字的数组,但我不确定如何前进。 我尝试了多个 .includes、.indexOf、ifs 等等,但我感到卡住了,有人能给我一个正确的方向吗?

我想有一个循环来计算 1 出现的次数,然后将其保存到这样的对象中

numObj = {
1: 2,
2: 1,
3: 4,
}

函数运行后立即构建对象,它基于 arrLength 参数构建它,我在开始时提供给函数。

不胜感激,谢谢!

更新: 我设法用这个来打印部分答案:

function getOccurrence(array, value) {
  return array.filter((x) => x === value).length;
}

for (let i = 1; i <= randomNum.length; i += 1) {
  let numOccurr = [];
  for (let j = 1; j <= randomNum.length; j += 1) {
    if (randomNum.includes(j)) {
      if (getOccurrence(randomNum, j) === i) {
        numOccurr.push(j);
        if (j === randomNum.length) {
          printOut(`Number: ${numOccurr.join(', ')} occurrs ${i} times.`);
          numOccurr = [];
        }
      }
    }
  }
}

如果我在“Number: 20 occurred 4 times”被打印后检查我的数组,我发现答案是正确的,问题是,有时它打印每个生成​​的数字 1 次,然后有时只打印那些生成的 2 次,等等。有时什么都不打印

已解决:

这段代码对我有用

const randomNum = [];

for (let i = 0; i < 20; i += 1) {
  randomNum.push(Math.floor(Math.random() * 20 + 1));
}

function getOccurrence(array, value) {
  return array.filter((x) => x === value).length;
}

for (let i = 1; i <= randomNum.length; i += 1) {
  const numOccurr = [];
  for (let j = 1; j <= randomNum.length; j += 1) {
    if (randomNum.includes(j)) {
      if (getOccurrence(randomNum, j) === i) {
        numOccurr.push(j);
      }
    }
  }
  if (numOccurr.length !== 0)
    printOut(`Number: ${numOccurr.join(', ')} occurred ${i} times.`);
}