如何迭代遍历嵌套对象并完成转换?
多层嵌套对象/数组的类型转换问题
我有一个可能包含多层嵌套对象、数组和值的对象,需要遍历它并完成转换。转换规则如下:
- 根据对象的
_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
相关产品推荐
相关产品推荐

