You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript实现返回带计数的相同值JSON数组?

嘿,我来帮你搞定这个问题!要实现统计数组中相同值的出现次数并转换成指定格式的JSON数组,用JavaScript可以很优雅地完成,核心思路是先用reduce统计计数,再转换成目标结构,最后转成JSON。

具体实现步骤

假设你的输入是一个普通数组(比如['apple', 'banana', 'apple', 'orange']),我们可以分三步完成:

  1. 用reduce统计每个值的出现次数
    这一步会生成一个以数组元素为键、出现次数为值的对象,方便后续转换。
  2. 将统计对象转换成目标数组结构
    把键值对拆分成{value: 元素值, count: 次数}的格式。
  3. 转成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:03:33