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

如何使用forEach统计二维数组中'cat'的出现次数?

解决二维数组中指定字符串的统计问题

先明确你当前代码的核心问题:

  • map方法会返回一个和原数组长度一致的新数组(原数组有4个元素,所以count是长度为4的数组),最后打印count.length自然得到4,这和统计'cat'的次数完全无关。
  • forEach没有返回值,且count + 1只是做了加法运算,没有把结果赋值给count,根本没实现累加逻辑。

下面给出几种结合箭头函数的正确实现方式:

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

先把二维数组转成一维,再用reduce累加次数:

const arr = [
  ['mammal','dog','fur'],
  ['mammal','cat','fur'],
  ['mammal','cat','fur'],
  ['fish','trout','scales']
];

const count = arr.flat().reduce((total, str) => {
  return str === 'cat' ? total + 1 : total;
}, 0);

console.log(count); // 输出2

说明:

  • arr.flat()将二维数组转为一维数组,方便统一遍历
  • reduce接收累加器函数和初始值0,每次遍历判断当前字符串是否为'cat',是则给累加器加1,否则保持原值

方法2:嵌套reduce(不扁平化数组)

如果不想改变数组结构,可以用两层reduce分别处理外层和内层数组:

const arr = [
  ['mammal','dog','fur'],
  ['mammal','cat','fur'],
  ['mammal','cat','fur'],
  ['fish','trout','scales']
];

const count = arr.reduce((outerTotal, innerArr) => {
  // 统计当前内层数组中'cat'的次数
  const innerCount = innerArr.reduce((innerTotal, str) => {
    return str === 'cat' ? innerTotal + 1 : innerTotal;
  }, 0);
  // 把内层统计结果加到外层累加器
  return outerTotal + innerCount;
}, 0);

console.log(count); // 输出2

方法3:修正你的forEach写法

如果坚持用forEach,需要先初始化累加变量,再在两层遍历中完成累加:

const arr = [
  ['mammal','dog','fur'],
  ['mammal','cat','fur'],
  ['mammal','cat','fur'],
  ['fish','trout','scales']
];

let count = 0;
arr.forEach(innerArr => {
  innerArr.forEach(str => {
    if (str === 'cat') {
      count += 1; // 必须用赋值累加,而非仅做加法运算
    }
  });
});

console.log(count); // 输出2

注意:这里要用let声明count(因为需要修改它的值),且必须写count += 1或count++,仅写count + 1不会改变count的实际值。

内容的提问来源于stack exchange,提问作者Southern-Remove

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:22:36