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

在日常开发中,我们经常会遇到需要把对象(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"
        }
    ]
]
相关推荐
编程技术手记1 小时前
Vite 开发环境前后端端口隔离:解决 index.html 冲突问题
前端·html
2301_780789661 小时前
云服务器数据会泄露吗?怎么保护云服务器的数据
运维·服务器·tcp/ip·网络安全
念越1 小时前
从网络基础到Socket编程:TCP/UDP原理 + Java实战详解
java·网络·tcp/ip·udp
2301_780789661 小时前
云服务器被黑能恢复吗?云服务器被黑的解决办法
运维·服务器·网络·安全·web安全
淘小白_TXB21961 小时前
头条百家采集改写发布软件用户使用手册
运维·服务器·头条采集·头条号采集·文章采集·头条采集软件
光影少年2 小时前
react16-react19类组件完整生命周期(挂载/更新/卸载)
前端·javascript·react.js
我是无敌小恐龙2 小时前
Java基础入门Day10 | Object类、包装类、大数/日期类、冒泡排序与Arrays工具类 超详细总结
java·开发语言·数据结构·算法·贪心算法·排序算法·动态规划
Web极客码2 小时前
Akismet对WordPress防垃圾评论
服务器·搜索引擎·wordpress
极客先躯2 小时前
高级java每日一道面试题-2025年12月07日-实战篇[Dockerj]-Docker daemon 的配置文件在哪里?常用的配置项有哪些?
java·docker·配置文件的实际位置·配置文件的格式规则·常用配置项全景与分类·配置如何生效·daemon 配置折射架构思维