如何用原生JS递归将含嵌套对象转换为指定格式数组
实现方案说明
你的初步思路完全可行,以下是针对你疑问的解答和完整实现:
疑问解答
Object.entries()完全适配该场景:该原生方法会直接将对象的自身可枚举键值对转换为[key, value]格式的数组,刚好符合你需要的基础结构。- 嵌套对象的准确判断方案:不能直接用
typeof value === 'object'判断,因为typeof null、数组、日期等类型的返回值也为object,会导致误判。推荐使用Object.prototype.toString.call(value) === '[object Object]',可以精准识别普通对象,排除其他引用类型和null。
完整递归实现
function objectToArray(obj) { // 入参非普通对象直接返回空数组,可根据需求调整异常处理逻辑 if (Object.prototype.toString.call(obj) !== '[object Object]') return [] return Object.entries(obj).map(([key, value]) => { // 是普通对象就递归处理 if (Object.prototype.toString.call(value) === '[object Object]') { return [key, objectToArray(value)] } // 非对象类型直接返回键值对 return [key, value] }) }
测试验证
用你给出的示例测试:
let obj = { name: 'john', age: 25, some: { a: 5.5, b: 5, c: 'pls' } } console.log(objectToArray(obj)) // 输出结果和要求完全一致:[['name', 'john'], ['age', 25], ['some', [['a',5.5], ['b', 5], ['c','pls']]]]
内容的提问来源于stack exchange,提问作者Kate
相关产品推荐
相关产品推荐

