如何用JavaScript实现返回带计数的相同值JSON数组?
嘿,我来帮你搞定这个问题!要实现统计数组中相同值的出现次数并转换成指定格式的JSON数组,用JavaScript可以很优雅地完成,核心思路是先用reduce统计计数,再转换成目标结构,最后转成JSON。
具体实现步骤
假设你的输入是一个普通数组(比如['apple', 'banana', 'apple', 'orange']),我们可以分三步完成:
- 用
reduce统计每个值的出现次数
这一步会生成一个以数组元素为键、出现次数为值的对象,方便后续转换。 - 将统计对象转换成目标数组结构
把键值对拆分成{value: 元素值, count: 次数}的格式。 - 转成JSON字符串
用JSON.stringify()把最终数组转换成符合要求的JSON格式。
完整代码示例
// 示例输入数组 const inputArray = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']; // 1. 统计每个值的出现次数 const countMap = inputArray.reduce((acc, currentValue) => { // 如果当前值还没被统计过,初始化为0再+1;否则直接累加 acc[currentValue] = (acc[currentValue] || 0) + 1; return acc; }, {}); // 2. 转换成目标数组结构 const resultArray = Object.entries(countMap).map(([value, count]) => ({ value, count })); // 3. 转成JSON字符串 const jsonResult = JSON.stringify(resultArray); console.log(jsonResult); // 输出:[{"value":"apple","count":3},{"value":"banana","count":2},{"value":"orange","count":1}]
复用封装(可选)
如果需要多次使用,可以封装成一个函数,还能处理输入校验和类型还原(比如把数字字符串转回数字):
function generateCountJson(input) { // 先校验输入是否为数组 if (!Array.isArray(input)) { throw new Error('输入必须是数组类型'); } const countMap = input.reduce((acc, current) => { acc[current] = (acc[current] || 0) + 1; return acc; }, {}); // 可选:如果需要保持数字的原始类型(避免被转成字符串) const resultArray = Object.entries(countMap).map(([value, count]) => ({ value: isNaN(Number(value)) ? value : Number(value), count })); return JSON.stringify(resultArray); } // 使用示例 console.log(generateCountJson([1, 2, 1, 3, 2])); // 输出:[{"value":1,"count":2},{"value":2,"count":2},{"value":3,"count":1}]
这个方案兼容性好,现代浏览器和Node.js都支持,逻辑简洁易懂,也能处理混合类型的数组(比如同时包含字符串和数字)。
内容的提问来源于stack exchange,提问作者Rannie Ollit
相关产品推荐
相关产品推荐

