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

NodeJS中如何统计JSON对象value属性的元素出现次数?

统计JSON对象中value属性的元素出现次数

给定如下JSON对象:

{"value": ["aaa", "bbb", "ccc", "aaa"], "answer": ["lorem", "lorem", "lorem", "lorem"], "question": ["lorem", "lorem", "lorem", "lorem"]}

需要统计其中value数组内元素的出现次数,期望得到结果:

{"aaa": 2,"bbb": 1,"ccc": 1}

你之前用reduce()的写法存在几个问题:

  • 遍历的是整个JSON对象query,但实际应该遍历query.value这个数组
  • 错误访问了name.value,遍历数组时name就是数组里的元素(比如"aaa"),并非带value属性的对象
  • 展开时误用...allNames.value,但累计对象allNames并没有value属性

正确的reduce()实现

const query = {"value": ["aaa", "bbb", "ccc", "aaa"], "answer": ["lorem", "lorem", "lorem", "lorem"], "question": ["lorem", "lorem", "lorem", "lorem"]};

const countedNames = query.value.reduce((allNames, name) => {
  const currCount = allNames[name] ?? 0;
  return {
    ...allNames,
    [name]: currCount + 1
  };
}, {} as Record<string, number>);

console.log(countedNames);
// 输出:{"aaa":2,"bbb":1,"ccc":1}

更高效的写法(减少对象展开开销)

如果数组元素数量较多,每次展开对象会产生额外性能损耗,可以直接修改累计对象:

const countedNames = query.value.reduce((allNames, name) => {
  allNames[name] = (allNames[name] ?? 0) + 1;
  return allNames;
}, {} as Record<string, number>);

内容的提问来源于stack exchange,提问作者Yasamura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:25:16