如何把对象数据转化为数组

在日常开发中,我们经常会遇到需要把对象(Object)转化为数组(Array)的场景,比如要统一处理对象的每一项数据,或者给组件传递数组格式的配置项。

下面就用一个实际例子,带大家一步步实现这个转化过程。

我们有一个包含两个配置项的对象:

javascript 复制代码
let obj = {
    sys_app: [
        {
          "app_id": "1671406669800796161",
          "app_code": "portal"
        },
        {
          "app_id": "1671406745336016898",
          "app_code": "system_manager"
        },
    ],
    sys_config: [
        {
          "config_name": "系统配置是否已经初始化的标识",
          "config_id": "1",
        },
        {
          "config_name": "验证码开关",
          "config_id": "23",
        },
    ],
};

Object.entries() 是 ES8 提供的一个方法,它可以把一个对象自身的可枚举属性,转化为一个 [key, value] 格式的二维数组。

使用方式:

javascript 复制代码
console.log(Object.entries(obj));

转化后的结果:

javascript 复制代码
[
    [
        "sys_app",
        [
            {
                "app_id": "1671406669800796161",
                "app_code": "portal"
            },
            {
                "app_id": "1671406745336016898",
                "app_code": "system_manager"
            }
        ]
    ],
    [
        "sys_config",
        [
            {
                "config_name": "系统配置是否已经初始化的标识",
                "config_id": "1"
            },
            {
                "config_name": "验证码开关",
                "config_id": "23"
            }
        ]
    ]
]

如果我们想要把 [key, value] 这种格式,改成更易读的 { name, value } 对象格式,可以配合 map() 来实现:

javascript 复制代码
let list = Object.entries(obj).map(([name, value]) => ({ name, value }));
console.log(list);

运行结果:

javascript 复制代码
[
    {
        "name": "sys_app",
        "value": [
            {
                "app_id": "1671406669800796161",
                "app_code": "portal"
            },
            {
                "app_id": "1671406745336016898",
                "app_code": "system_manager"
            }
        ]
    },
    {
        "name": "sys_config",
        "value": [
            {
                "config_name": "系统配置是否已经初始化的标识",
                "config_id": "1"
            },
            {
                "config_name": "验证码开关",
                "config_id": "23"
            }
        ]
    }
]

完整代码如下:

javascript 复制代码
let obj = {
    sys_app: [
        {
          "app_id": "1671406669800796161",
          "app_code": "portal"
        },
        {
          "app_id": "1671406745336016898",
          "app_code": "system_manager"
        },
    ],
    sys_config: [
        {
          "config_name": "系统配置是否已经初始化的标识",
          "config_id": "1",
        },
        {
          "config_name": "验证码开关",
          "config_id": "23",
        },
    ],
};

let list = Object.entries(obj).map(([name, value]) => ({ name, value }))
console.log(list)
总结
  • Object.entries(obj)

    • 作用:将对象转为 [[key, value], [key, value]] 格式的二维数组
    • 注意:只会处理对象自身的、可枚举的属性
  • map(([name, value]) => ({ name, value }))

    • 这里用到了数组解构 ,直接把 [key, value] 拆成了 namevalue 两个变量
    • 箭头函数里的 ({ name, value }) 是简写,等价于 { return { name: name, value: value }; }
拓展

使用 Object.keys(obj) 获取keys:

javascript 复制代码
let list = Object.keys(obj)
console.log(list)

结果:

javascript 复制代码
 ['sys_app', 'sys_config']

使用 Object.values(obj) 获取values:

javascript 复制代码
let list = Object.values(obj)
console.log(list)

结果:

javascript 复制代码
[
    [
        {
            "app_id": "1671406669800796161",
            "app_code": "portal"
        },
        {
            "app_id": "1671406745336016898",
            "app_code": "system_manager"
        }
    ],
    [
        {
            "config_name": "系统配置是否已经初始化的标识",
            "config_id": "1"
        },
        {
            "config_name": "验证码开关",
            "config_id": "23"
        }
    ]
]
相关推荐
IT_陈寒10 分钟前
Redis误用keys命令把生产环境搞崩了,血的教训
前端·人工智能·后端
新时代牛马11 分钟前
实时 Linux:PREEMPT_RT、延迟来源与观测
linux·运维·服务器
计算机魔术师22 分钟前
5000亿估值冲刺科创板,DeepSeek 为何急着上市?
前端
Tangyuewei23 分钟前
给老 Spring 项目装个 AI Agent
java·人工智能·spring
微露清风23 分钟前
# Linux 进程全景:从 PCB 到 O(1) 调度队列
linux·服务器
我血条子呢28 分钟前
前端解析word方案
前端·word
她的男孩38 分钟前
多租户和数据权限怎么共存?扒完拦截器注册链路,我找到 4 个隐蔽的坑
java·后端·架构
kyriewen38 分钟前
我用 AI 写完一个需求后才发现,最难的不是 prompt,而是验收
前端·程序员·ai编程
申行41 分钟前
Vue 3 + DYMO Connect Framework 实战:从标签模板到打印服务的完整实现
前端
两只羊ovo41 分钟前
Vue 3 + DeepSeek 流式输出实战:从“干等”到“打字机”体验
前端·vue.js