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

如何在含数组循环与嵌套forEach的函数中直接返回结果?

问题描述

我有一个包含嵌套循环的函数,外层为数组的for...of循环,内层是forEach循环。代码如下:

const myFunction = (data: string[][]): boolean => {

  for (const row of data) {
    row.forEach((item, i) => {

      if (!something) {
        return false;
      }
      if (
        !somethingelse
      ) {
        return false;
      }

      return undefined;
    });
  }

  return true;
};

我希望当满足条件返回false时,能让myFunction直接返回false;只有所有循环都未触发返回false的情况,才最终返回true。但我了解到,由于是嵌套循环,当前返回false仅会退出forEach循环,无法终止整个函数。我想到的唯一方案是声明一个外部变量并赋值为false,最后返回该变量,但ESLint会警告修改循环外部变量可能导致内存泄漏。请问有没有无需创建外部变量、能直接让函数返回而非仅退出循环的方法?

解决方案

方法1:将内层forEach替换为for...of循环

forEach的回调是独立函数,里面的return只能跳出当前那一次回调执行,没法终止外层循环或者整个函数。换成for...of之后,内层循环里的return false就能直接让整个myFunction终止并返回false,完全不需要额外变量:

const myFunction = (data: string[][]): boolean => {
  for (const row of data) {
    // 需要索引的话可以用entries()
    for (const [i, item] of row.entries()) {
      if (!something) {
        return false;
      }
      if (!somethingelse) {
        return false;
      }
    }
  }
  return true;
};

方法2:使用数组的every()方法利用短路特性

every()方法天生支持“短路”逻辑:遍历过程中只要有一个元素不满足判断条件,就会立刻停止遍历并返回false;只有所有元素都满足条件才会返回true。正好贴合需求,嵌套使用every()就能替代原来的嵌套循环:

const myFunction = (data: string[][]): boolean => {
  return data.every(row => {
    return row.every((item, i) => {
      // 两个条件都满足才返回true,否则返回false触发短路终止
      return something && somethingelse;
    });
  });
};

嫌代码冗余的话可以简化成一行:

const myFunction = (data: string[][]): boolean => 
  data.every(row => row.every((item, i) => something && somethingelse));

这种写法完全没有外部变量,逻辑清晰,也不会触发ESLint警告。

方法3:利用some()反向判断

换个思路,用some()检测是否存在不符合条件的元素:只要有一个元素不满足条件,some()就会立刻返回true,最后取反结果返回即可:

const myFunction = (data: string[][]): boolean => {
  // 检查是否存在无效项
  const hasInvalidItem = data.some(row => {
    return row.some((item, i) => {
      return !something || !somethingelse;
    });
  });
  // 没有无效项返回true,否则返回false
  return !hasInvalidItem;
};

同样无需外部变量,也能实现需求。


内容的提问来源于stack exchange,提问作者sir-haver

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:35:22