如何统计对象数组中字符串化数组元素的出现次数
统计字符串化数组元素的出现次数
输入数据
[ { entry: 1, answer: "[\"aaa\",\"bbb\"]" }, { entry: 2, answer: "[\"ccc\",\"bbb\"]" }, { entry: 3, answer: "[\"ccc\",\"bbb\"]" } ]
期望结果
{ "aaa": 1, "ccc": 2, "bbb": 3 }
原代码问题
你当前的代码直接将整个字符串化的数组作为键统计,只能得到不同字符串数组的出现次数,无法统计数组内部元素的频次。
修正后的代码
const countAnswers = (ans) => { return ans.reduce((obj, v) => { // 将字符串化的数组解析为真实数组 const parsedAnswers = JSON.parse(v.answer); // 遍历解析后的数组,逐个统计元素出现次数 parsedAnswers.forEach(item => { obj[item] = (obj[item] || 0) + 1; }); return obj; }, {}); };
关键逻辑说明
- 解析字符串数组:用
JSON.parse()把v.answer的字符串内容转换成可操作的JavaScript数组。 - 遍历统计元素:对解析后的数组遍历,针对每个元素更新计数对象——元素已存在则计数+1,不存在则初始化为1。
测试验证
调用countAnswers(你的输入数组),会直接返回你期望的统计结果。
内容的提问来源于stack exchange,提问作者user3174311
相关产品推荐
相关产品推荐

