📅  最后修改于: 2023-12-03 15:38:54.217000             🧑  作者: Mango
在 JavaScript 中,我们经常会使用对象数组来存储数据。有时候我们需要统计数组中每个名称出现的次数,以便进行一些统计分析工作。下面介绍两种方法:
reduce 方法可以将数组中的每个元素依次执行回调函数,然后返回一个累加的结果。我们可以借助 reduce 方法来统计名称出现的次数,具体实现如下:
const arr = [
{ name: '张三', age: 20 },
{ name: '李四', age: 30 },
{ name: '张三', age: 40 },
{ name: '王五', age: 25 },
{ name: '李四', age: 22 },
]
const countObj = arr.reduce((acc, cur) => {
if (acc[cur.name]) {
acc[cur.name]++
} else {
acc[cur.name] = 1
}
return acc
}, {})
console.log(countObj) // { '张三': 2, '李四': 2, '王五': 1 }
在回调函数中,我们使用 if 语句来判断名称是否已经存在于结果对象 acc 中,如果存在则计数器加 1,否则将计数器初始化为 1。
除了使用 reduce 方法之外,我们还可以使用普通的 for 循环来统计名称出现的次数,具体实现如下:
const arr = [
{ name: '张三', age: 20 },
{ name: '李四', age: 30 },
{ name: '张三', age: 40 },
{ name: '王五', age: 25 },
{ name: '李四', age: 22 },
]
const countObj = {}
for (let i = 0; i < arr.length; i++) {
const name = arr[i].name
countObj[name] = (countObj[name] || 0) + 1
}
console.log(countObj) // { '张三': 2, '李四': 2, '王五': 1 }
这里我们使用一个普通的 for 循环,依次遍历数组中的每个元素,利用对象字面量的方式初始化一个计数器 countObj。在每次循环中,我们从数组元素中取出名称,并通过 countObj[name] 来获取当前名称已经出现的次数,如果不存在则默认为 0,最后将计数器加 1。
无论是使用 reduce 方法还是 for 循环,我们都可以很方便地统计对象数组中重复名称的出现次数,便于进行各种数据分析工作。