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

如何统计JavaScript JSON对象中指定ownerId的出现次数?现有实现是否正确?

问题:统计指定ownerId的出现次数,我的代码实现是否正确?

需求:在给定的JSON对象中,根据输入值统计ownerId的出现次数。例如输入值为1时,结果应为3(因为ownerId=1共出现3次)。我写了使用find和reduce的代码,想确认是否正确。

我的现有代码

let inputValue = 1;
let return = "";

const result = jsonResponse.jsonArray[0].info.find(
(arr) => arr.ownderID === inputValue;  );
    
var data = jsonResponse.jsonArray[0].info
        .reduce((counts, result) => {
        const inputItem = result[inputValue];
        counts[inputItem] = (counts[inputItem] || 0) + 1;
        return counts;
      }, {
      });

    return = data;

给定的JSON数据

const jsonResponse = {
  "jsonArray": [
    {
      "info": [
        {
          "ownerId": 1,
          "carType": "Nissan",
          "houseType": "Rancher"
        },
        {
          "ownerId": 1,
          "carType": "Ford",
          "houseType": "Trailer"
        }
      ],
      "familyInfo": {
        "kids": 1,
        "tuition": "yes",
        "parentId": 7
      }
    },
    {
      "info": [
        {
          "ownerId": 3,
          "carType": "Nissan",
          "houseType": "Single"
        }
      ],
      "familyInfo": {
        "kids": 4,
        "tuition": "no",
        "parentId": 11
      }
    },
    {
      "info": [
        {
          "ownerId": 1,
          "carType": "Chevy",
          "houseType": "TownHome"
        }
      ]
    }
  ]
}

代码问题分析

你的现有代码存在几个关键错误,无法正确实现需求:

  1. 拼写错误:find方法里的ownderID是笔误,正确属性名是ownerId;且find是用来查找第一个匹配元素,不是统计次数,这段代码完全多余。
  2. 遍历范围错误:你只遍历了jsonResponse.jsonArray[0].info,但jsonArray包含3个元素,每个都有info数组,会漏掉后面两个info里的ownerId。
  3. 统计逻辑错误:reduce里的result[inputValue]是取对象中键为输入值的属性,比如输入1时会找result['1'],但你实际需要判断result.ownerId是否等于输入值再计数。
  4. 关键字误用:return是JavaScript关键字,不能用作变量名,会直接导致语法错误。

正确实现方式

方式1:扁平化数组后统计

先把所有info数组的元素合并成一个数组,再用reduce统计指定ownerId的次数:

const inputValue = 1;
// 合并所有info数组的元素
const allInfoItems = jsonResponse.jsonArray.flatMap(item => item.info);
// 统计目标ownerId的出现次数
const count = allInfoItems.reduce((total, item) => {
  return item.ownerId === inputValue ? total + 1 : total;
}, 0);

console.log(count); // 输入1时输出3,输入3时输出1

方式2:嵌套遍历统计

直接遍历jsonArray的每个元素,再遍历其info数组计数:

const inputValue = 1;
let count = 0;

jsonResponse.jsonArray.forEach(arrItem => {
  arrItem.info.forEach(infoItem => {
    if (infoItem.ownerId === inputValue) {
      count++;
    }
  });
});

console.log(count); // 输入1时输出3,输入3时输出1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:55:14