如何统计数组中相邻匹配项的连续出现次数并返回对应计数值
数组连续相邻相同元素计数实现
需求说明
需要统计数组中所有相邻匹配元素的连续出现次数,要求如下:
- 用类似
map()的遍历循环实现,不需要存储当前元素之外的已统计内容 - 每组连续相同元素全部统计完成后,才输出可用的计数结果,用于为对应组预留存储空间
- 最终逐行输出的计数结果符合预期值
示例数据
给定示例数组:
const array = ['ball', 'batter', 'batter', 'amount', 'amount', 'github', 'github', 'github', 'account', 'account', 'account', 'account', 'account', 'account', 'account', 'github', 'github', 'github']
预期输出结果依次为:1、2、2、3、7、3
实现代码
// 初始化第一个元素的计数 let currentItem = array[0] let count = 1 array.forEach((item, index) => { // 第一个元素已初始化,跳过处理 if (index === 0) return if (item === currentItem) { // 当前元素和匹配元素一致,计数累加 count++ } else { // 遇到不同元素,当前组统计完成,输出计数 console.log(count) // 重置为新组的初始值 currentItem = item count = 1 } // 遍历到数组末尾,输出最后一组的计数 if (index === array.length - 1) { console.log(count) } })
实现说明
- 全程仅维护
currentItem(当前匹配的元素值)和count(当前连续计数)两个变量,没有额外存储历史统计数据,内存占用极低 - 只有在当前连续组统计结束(遇到不同元素/遍历到数组末尾)时才输出
count,此时的计数是最终可用值,可直接用于预留空间的计算 - 运行后
console.log会依次输出1、2、2、3、7、3,完全符合预期要求
内容的提问来源于stack exchange,提问作者peter
相关产品推荐
相关产品推荐

