计算数组中元素出现次数

这里我们将来学习如何计算数组中元素出现的次数。

for of 循环(不推荐)

在 for...of 循环期间,检查元素是否已经在对象中;如果是在的,则将其值加一。否则,它是添加到对象的新元素。

const myArray = [1, 2, 4, 3, 3, 5, 5, 6, 3, 4, 6]
const counts = {}

for (const num of myArray) {
  counts[num] = counts[num] ? counts[num] + 1 : 1
}
console.log(counts[1], counts[2], counts[3], counts[4], counts[5],counts[6])

当然这有很大的局限性,下面我们用 reduce 实现一下

Array.prototype.reduce(推荐)

Array.prototype.reduce 接受两个参数:一个回调函数和一个初始值。将初始值设置为 Object 时,可以将该对象的属性设置为数组元素。

const arr = [1, 2, 4, 3, 3, 5, 5, 6, 3, 4, 6]
const myArray = arr.reduce(function (accumulator, currentValue) {
  accumulator[currentValue] = ++accumulator[currentValue] || 1
  return accumulator
}, {})
console.log(myArray)

问题

Array.prototype.reduce 除了计算数组中元素次数还有哪些用法?