如何统计JavaScript二维数组中各元素的总出现次数并返回计数对象
JavaScript数组元素计数实现方案
首先明确需求:统计二维数组中所有内层数组元素的总出现次数,返回键为元素名称、值为对应计数的对象。
现有思路的问题
你初始定义的let returnObj = {name:"",count:0}结构不符合需求,该结构只能记录单个元素的名称和计数,无法存储多元素的统计结果,正确的初始状态应该是空对象const countResult = {}。
实现方案
方案1:先扁平化数组再统计(逻辑最直观)
先通过flat()将二维数组转为一维数组,再遍历统计每个元素的出现次数:
const someArr = [["A","B"],["A","C"],["C","A"],["B","D"]]; const countResult = {}; // 扁平化二维数组 const flatArr = someArr.flat(); flatArr.forEach(item => { // 已存在则计数+1,不存在则初始化为1 countResult[item] ? countResult[item]++ : countResult[item] = 1; }) console.log(countResult); // 输出 {"A":3, "B":2,"C":2,"D":1}
方案2:嵌套遍历统计(基于原思路修改)
不需要用map(map用于返回新数组,单纯遍历用forEach即可),直接嵌套遍历内层的每个元素做统计:
const someArr = [["A","B"],["A","C"],["C","A"],["B","D"]]; const countResult = {}; someArr.forEach(arr => { arr.forEach(item => { countResult[item] = (countResult[item] || 0) + 1; }) })
方案3:reduce函数式实现
const someArr = [["A","B"],["A","C"],["C","A"],["B","D"]]; const countResult = someArr.flat().reduce((acc, cur) => { acc[cur] = (acc[cur] || 0) + 1; return acc; }, {})
内容的提问来源于stack exchange,提问作者Eden M
相关产品推荐
相关产品推荐

