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

TypeScript中forEach与for in循环递归处理对象结果差异问题问询

差异原因

两个函数中return关键字的作用域完全不同,是导致行为不一致的核心原因:

  • 使用forEach实现的函数中,return作用于forEach接收的回调函数:仅会终止当前这一轮回调的执行,不会跳出整个forEach遍历循环。递归处理完当前对象类型的属性后,程序会回到循环中继续处理剩余的其他属性,因此可以完整遍历所有属性完成去空格。
  • 使用for in实现的函数中,return直接作用于trimWithForIn函数本身:只要遍历到第一个类型为对象的属性,执行return trimWithForIn(obj[prop])后,整个trimWithForIn函数就会直接终止执行,剩余未遍历的属性会被完全跳过,因此只会处理第一个对象属性和递归内部的属性,外层其他属性都不会被处理。

修复方案

只要去掉for in循环内递归调用前的return关键字即可,修改后代码如下:

function trimWithForIn(obj: any): any {
    if (obj !== null && typeof obj === 'object') {
        for (var prop in obj) {
            // 若属性为对象则递归处理,去掉return即可避免函数提前终止
            if (typeof obj[prop] === 'object') {
                trimWithForIn(obj[prop]);
            }
            // 若属性为字符串则去除首尾空白字符
            if (typeof obj[prop] === 'string') {
                obj[prop] = obj[prop].trim();
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:06:08