计算数组中的重复项
Count the Duplicates in an Array using JavaScript
要计算数组中的重复项:
- 声明一个空对象变量,它将存储每个值的计数。
- 使用该
forEach()
方法遍历数组。 - 在每次迭代中,将值的计数递增
1
或将其初始化为1
。
索引.js
const arr = ['one', 'two', 'one', 'one', 'two', 'three']; const count = {}; arr.forEach(element => { count[element] = (count[element] || 0) + 1; }); // 👇️ {one: 3, two: 2, three: 1} console.log(count);
我们传递给
Array.forEach
方法的函数会针对数组中的每个元素进行调用。
在每次迭代中,我们检查当前值是否已经作为count
对象中的键存在。如果存在,我们将其递增1
。
如果该值不存在,我们将其初始化为1
。
我们使用逻辑或 (||) 运算符来检查数组中的键是否尚未初始化。如果访问器返回
undefined
,我们将键的值初始化为0
+ 1
。在最后一次迭代之后,该count
对象包含数组元素作为键,它们在数组中出现的次数作为值。
另一种帮助我们避免中间count
变量的方法是使用
Array.reduce
方法。
使用该reduce()
方法计算数组中的重复项,将一个空对象作为累加器的初始值传递给它。在每次迭代中,增加对象中值的计数,或将值初始化为
1
。
索引.js
const arr = ['one', 'two', 'one', 'one', 'two', 'three']; const count = arr.reduce((accumulator, value) => { return {...accumulator, [value]: (accumulator[value] || 0) + 1}; }, {}); // 👇️ {one: 3, two: 2, three: 1} console.log(count);
这种方法非常相似。然而,它允许我们避免声明一个空的对象变量。
我们传递给reduce()
方法的函数会为数组中的每个元素调用。
我们传递了一个空对象作为变量的初始值。
accumulator
无论我们从回调函数返回什么,都将作为accumulator
下一次迭代传递。
我们使用
解构赋值
将累加器中的键值对解压缩到一个新对象中,我们通过递增或初始化它来覆盖当前属性1
。
在最后一次迭代之后,对象将数组的元素存储为键,并将它们在数组中的出现存储为值。