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

如何迭代遍历嵌套对象并完成转换?

多层嵌套对象/数组的类型转换问题

我有一个可能包含多层嵌套对象、数组和值的对象,需要遍历它并完成转换。转换规则如下:

  • 根据对象的_type字段处理值:若_type为0则直接使用value字段的原值,否则根据类型编号用对应的自定义类解析值。
  • 优先使用迭代方案,避免递归导致的栈溢出。

输入示例

{
  arrayExample: [{
    _type: 0,
    value: 5
  }, [{
    _type: 0,
    value: 1.1
  }, {
    _type: 0,
    value: 1.2
  }], {
    _type: 1,
    value: "hello"
  }],
  simpleVal: {
    _type: 0,
    value: 10
  }
}

预期输出

{
  arrayExample: [5, [1.1, 1.2], new customClass("hello")],
  simpleVal: 10
}

遇到的问题

最初尝试的方案能处理部分场景,但在嵌套对象转换时失效。比如输入以下对象:

const obj2 = {
    a: {
        value: 5,
        _type: 0
    },
    b: { 
        nested: {
            value: "foo",
            _type: 0
        },
        arr : [
            {
                value: 1,
                _type: 0
            },
            {
                value: 2,
                _type: 0
            },
        ]
    }
}

实际返回结果:

{
  a: 5,
  b: undefined
}

而预期结果应为:

{
  a: 5,
  b: {
    nested: "foo",
    arr: [1, 2]
  }
}

解决方法

通过实现一个对象版的map函数,配合递归处理逻辑,完美解决了嵌套对象和数组的转换问题。代码如下:

// 实现对象的map映射函数
function objMap(obj, func) {
  return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, func(v)]));
}

// 递归处理值转换
const getValue = v => 
  Array.isArray(v) ? v.map(getValue) : 
  typeof v === 'object' && v._type === undefined ? objMap(v, getValue) : 
  getTyped(v);

// 生成最终结果
const result = Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, getValue(v)]));

注:getTyped函数需自行实现,根据_type值返回对应自定义类实例或处理后的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:56:23