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

如何用原生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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:48:00