使用javascript统计数组中元素出现的个数
let arrName = ['丁丁', '迪西', '啦啦', '小波', '啦啦', '迪西']
// 1
//1、 创建一个空的Object
//2、 接着去循环遍历数组的每一项
//3、 将目标数组循环的项作为空对象的key,再判断key对应的值是否存在
//4、 不存在就则将key值设置为1(也就是第一次出现)
//5、 若已经存在的话,应把当前的值+1即可
let obj = {}
arrName.forEach(ele => {
if (obj[ele]) {
obj[ele]++
} else {
obj[ele] = 1
}
})
// 2
//使用Array.prototype.reduce
// 其中,第一个参数callback函数: pre为上次return的值,next为数组的本次遍历的项
// 第二个参数为初始值,也是第一个pre
const totalObj = arrName.reduce((pre, next) => {
if (pre[next]) {
pre[next]++
} else {
pre[next] = 1
}
return pre
}, {})
// 3
/* 1、创建一个空Map
2、 依然是循环目标数组的每一项
3、 将数组循环的项作为空Map的key,获取M对应的值
4、 如果已经有值就把对应的值+1后从新赋值
5、 如果没有值就创建新的数据项,设置值为1 */
// 与对象的key会被自动转换为字符串类型把不同,es6的Map类型的key可以是任意类型
let mapObj = new Map()
arrName.forEach(ele => {
let num = mapObj.get(ele)
if (num) {
mapObj.set(ele, ++num)
} else {
mapObj.set(ele, 1)
}
})
console.log('统计', obj)
console.log('统计2', totalObj)
console.log('统计3', mapObj)