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

在日常开发中,我们经常会遇到需要把对象(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] 拆成了 name 和 value 两个变量
    • 箭头函数里的 ({ 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"
        }
    ]
]
相关推荐
wuminyu9 分钟前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
派小心.24 分钟前
A/B测试工具免费版够用吗?
前端·数据分析
前端snow1 小时前
ai agent --- redis 缓存
前端
duanshu_2 小时前
官网表单与下载异常怎么排查?五个环节定位故障
前端·自动化·flyweight
Zhou1411362 小时前
SpringBoot_03_Web开发
前端·spring boot·python
辻弋2012 小时前
【无标题】
大数据·服务器·前端·搜索引擎·开源软件
蜗牛互联网3 小时前
WSL Containers GA:本地AI容器的生命周期、网络与治理验收
java·网络·人工智能·后端
FluxArt3 小时前
GPT Image 2.5 中文提示词教程:Flux Art 可复用模板
前端·gpt·算法
龙亘川3 小时前
铭记英烈守初心,数字强基促服务:亘川智城退役军人服务系统的实践与价值
java·数据库·人工智能
OxYGC3 小时前
[AI工程] Spring AI 第廿一篇:存量 REST 接口的 MCP 化改造实录——工具从哪条路径注册、参数描述怎么写、身份怎么过去
java·人工智能·spring