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

如何递归替换对象/数组中的字符串为空串、数字为0?是否有现成工具库?

替换对象/数组中字符串与数字的实现方案

你可以通过两种方式实现需求:自己编写递归函数,或者借助lodash这类工具库简化代码。

一、手动实现递归函数

直接编写递归逻辑遍历对象和数组,针对不同类型的值做替换:

function transformValues(obj) {
  // 处理对象和数组
  if (typeof obj === 'object' && obj !== null) {
    if (Array.isArray(obj)) {
      return obj.map(item => transformValues(item));
    } else {
      const result = {};
      for (const key in obj) {
        if (obj.hasOwnProperty(key)) {
          result[key] = transformValues(obj[key]);
        }
      }
      return result;
    }
  }
  // 替换字符串为空串
  else if (typeof obj === 'string') {
    return "";
  }
  // 替换数字为0
  else if (typeof obj === 'number') {
    return 0;
  }
  // 其他类型保持原值
  return obj;
}

// 使用示例
const test = {
    a: "asdf",
    b: 2,
    c: [
            {
                lala: "more strings",
                d: "saaa"
            }
    ]
};

const transformedTest = transformValues(test);
console.log(transformedTest);

二、使用lodash工具库

lodash的_.cloneDeepWith方法可以深度克隆对象/数组,并允许自定义每个值的转换逻辑,完美适配需求:

const _ = require('lodash');

const test = {
    a: "asdf",
    b: 2,
    c: [
            {
                lala: "more strings",
                d: "saaa"
            }
    ]
};

const transformedTest = _.cloneDeepWith(test, (value) => {
  if (typeof value === 'string') {
    return "";
  }
  if (typeof value === 'number') {
    return 0;
  }
  // 不返回值时,lodash会继续递归处理嵌套结构
});

console.log(transformedTest);

这个方法不需要手动处理递归遍历,lodash会自动处理对象和数组的嵌套结构,只需在回调里定义字符串和数字的替换规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:35:21