如何在 JavaScript 中将数组转为对象

article/2025/9/22 21:38:46

首先,我们需要明白对象具有键和值。

const object = {key: 'value'
}

如果我们想把某个东西转换成一个对象,我们需要传递具有这两个要求的东西:键和值。

满足这些要求的参数有两种类型:

  • 具有嵌套键值对的数组
  • Map 对象

数组

这是一个带有键值对的嵌套数组

const nestedArray = [['key 1', 'value 1'],['key 2', 'value 2']
]

当我们应用它时,我们可以使用 Object.fromEntries 方法获取对象:

Object.fromEntries(nestedArray) // { key 1: "value 1", key 2: "value 2"}

Map

ES6 为我们带来了一个名为 Map 新的数据结构,它与 Objects 非常相似。

TC39:Map 对象是键/值对的集合,其中键和值可以是任意的 ECMAScript 语言值。

让我们创建新的 map 对象。

// 使用 constructor
const map = new Map([['key 1', 'value 1'],['key 2', 'value 2']
])// 或者我们可以使用实例方法 set
const map = new Map()
map.set('key 1', 'value 1')
map.set('key 2', 'value 2')// Map(2) {"key 1" => "value 1", "key 2" => "value 2"}

现在让我们使用 object.fromEntriesmap 转换成一个对象

Object.fromEntries(map) // { key 1: "value 1", key 2: "value 2"}

其他类型

尝试将其他数据类型传递到 Object.fromEntries 时要小心。以下所以列出的所有情况将一致抛出一个错误:

类型
undefinedObject.fromEntries(undefined)
NullObject.fromEntries(null)
BooleanObject.fromEntries(true)
NumberObject.fromEntries(100)
StringObject.fromEntries("hi")
ObjectObject.fromEntries({key: "value"})
扁平化数组Object.fromEntries([1,2,3])

注意:确保只传递一个键值对。

Object.fromEntriesObject.entries

Object.entries 方法返回一个给定对象自身可枚举属性的键值对数组。

const object = { key1: 'value1', key2: 'value2' }
const array = Object.entries(object) // [ ["key1", "value1"], ["key2", "value2"] ]Object.fromEntries(array) // { key1: 'value1', key2: 'value2' }

对象到对象转换

你可以在最初的 TC39 提案 找到引入 Object.entries 方法的缘由。

通常,当我们选择使用 Object.entries 时,是因为它让我们能够访问一些漂亮的数组方法。

const user = {name: 'O.O',age: 18,address: 'xxx'
}console.log(Object.entries(user).filter(([key, value]) => key !== 'age'))
// [["name", "O.O"], ["address", "xxx"]]

它返回了一组嵌套数组,而不是我们想要的对象转对象,后面又引入了 fromEntries 方便该操作。

const arr = [["name", "O.O"], ["address", "xxx"]]
console.log((Object.fromEntries(arr)) // {name: "O.O", address: "xxx"}const user = {name: 'O.O',age: 18,address: 'xxx'
}Object.fromEntries(Object.entries(user).filter(([key, value]) => key !== 'age'))
// {name: "O.O", address: "xxx"}

浏览器支持情况

除了 IE,大多数主流浏览器都支持这种方法:

Object.fromEntries()

替代方案

Object.fromEntries 于2019年推出,所以它仍然是相当新的的一个方法。因此,在照顾旧浏览器的情况下,我们需要其他的替代方案,将一个键值对数组转化为一个对象以更好的支持。

Reduce

将数组转换为对象的一种常用方法是使用 reduce 方法

const array = [['key1', 'value1'],['key2', 'value2']
]const map = new Map([['key1', 'value1'],['key2', 'value2']
])function toObject(pairs) {return Array.from(pairs).reduce((acc, [key, value]) => Object.assign(acc, { [key]: value }),{})
}toObject(array) // { key1: 'value1', key2: 'value2' }
toObject(map) // { key1: 'value1', key2: 'value2' }

Underscore 和 Lodash

Underscore 和 Lodash 也可将键值对转换为对象。

_.object — 将阵列转换为对象。传递单个[键、值]对列表,或键列表和值列表。

// Underscore
const array = [['key1', 'value1'],['key2', 'value2']
]_.object(array) // { key1: 'value1', key2: 'value2' }

_.fromPairs — 此方法返回由键值对组成的对象。

// Lodash
const array = [['key1', 'value1'],['key2', 'value2']
]_.fromPairs(array) // { key1: 'value1', key2: 'value2' }

http://chatgpt.dhexx.cn/article/IgtyQ8W8.shtml

相关文章

第二类斯特林数

概要&#xff1a; 第二类斯特林数表示将n个不同的元素分成m个集合的方案数。 代码 s[i][j]实现代码&#xff1a; const int mod1e97;//取模 LL s[N][N];//存放要求的第一类Stirling数 void init(){memset(s,0,sizeof(s));s[1][1]1;for(int i2;i<N-1;i){for(int j1;j<…

斯特林数

斯特林数分为第一类斯特林数和第二类斯特林数&#xff0c;第一类斯特林数分为有符号斯特林数和无符号斯特林数&#xff1b; 1.什么是圆排列&#xff1f; 圆排列是把n个数中拿出k个数组成一个圆的种类数&#xff0c;则这里组成m个圆排列的意思是组成m个不同的圆的种类数&…

斯特林数(Stirling)

第一类斯特林数 第一类斯特林数表示的是将n个不同元素分成k个不同的环的方案数。两个环不相同当且仅当这两个环不能通过旋转得到。记作s(n,k). s(n,k)的递推公式&#xff1a; s(n,k)(n-1)*s(n-1,k)s(n-1,k-1) ,1<k<n 边界条件&#xff1a;s(n,0)0 ,n>1 s(n,n)1 ,n…

斯特林数(Siteling_Number)

一、基本概念 斯特林数出现在许多组合枚举问题中. 第一类斯特林数 StirlingS1[n,m]&#xff0c; 给出恰包含 m 个圈的 n 个元素 的排列数目. 斯特林数满足母函数关系 . 注意某些 的定义与 Mathematica 中的不同&#xff0c;差别在于因子 . 第二类斯特林数 StirlingS2[n,m]给…

斯特林数(数论)

斯特林数&#xff1a;stirling 概念&#xff1a; 1、第一类斯特林数&#xff1a;把1~n排列成k个非空循环的方案数&#xff0c;用小写s(n,k)或[n k]表示 2、第二类斯特林数&#xff1a;将1~n排成k个非空集合的方案数&#xff0c;用大写S(n,k)或{n,k}表示 第一类斯特林数&…

组合数学 —— 斯特林数(Stirling)

【第一类斯特林数】 1.定理 第一类斯特林数 S1(n,m) 表示的是将 n 个不同元素构成 m 个圆排列的数目。 2.递推式 设人被标上1,2,.....p&#xff0c;则将这 p 个人排成 m 个圆有两种情况&#xff1a; 在一个圆圈里只有标号为 p 的人自己&#xff0c;排法有 S1(n-1,m-1) 个。…

Linux Debian11创建新用户和删除用户

一、 Debian 创建 新用户 1.创建新用户 首先&#xff0c;要创建用户&#xff0c;当前用户必须是 root 用户或者 sudo 用户。 使用下面adduser 命令创建一个用户名为test的sudo用户&#xff0c;按照提示输入密码&#xff0c;使用 adduser 命令&#xff0c;还会创建用户的主目…

Linux中创建新用户,设置ID与密码

如&#xff1a;新建用户admin&#xff0c;指定在/root家目录下&#xff0c;并指定用户id为6666&#xff0c;设置密码&#xff1a;admin123 添加用户 add&#xff1a;用于创建新的系统用户 语法&#xff1a;useradd[选项] 用户名 -d 指定用户的家目录&#xff08;默认用户名目录…

Linux手工创建新用户

准备工作&#xff08;配置流程的理解&#xff09; Linux中useradd命令即一系列文件操作的结合体&#xff0c;所以我们可以通过查看useradd命令来确认我们手工创建新用户需要完成的文件配置 找到man useradd中涉及的文件部分 对于手工创建用户有用的文件&#xff1a; /etc/pas…

linux创建/删除新用户

为了完成本关任务&#xff0c;你需要掌握如下知识&#xff1a; Linux创建用户命令Linux删除用户命令 Linux创建用户命令 Linux中使用useradd命令来创建一个新用户。 命令格式格式&#xff1a; useradd [命令参数] 参数 常见命令参数&#xff1a; -d<登入目录>&…

Linux如何创建一个新的用户?

1. useradd -d /root/admin admin -u 6666 把一个用户名为admin&#xff0c;id为6666的新用户创建在指定 /root 家目录下。 2. passwd admin 给新用户admin设置密码。

Linux下如何创建新用户并设置密码及删除用户

一&#xff1a;演示创建新用户binbin 在命令行输入useradd binbin&#xff0c;表示创建新用户binbin 回车后&#xff0c;直接 ll 回车查看到 binbin 就已经创建好了 二&#xff1a;设置密码 1.1输入命令&#xff1a; passwd binbin&#xff0c;回车&#xff0c;设置用户 binb…

linux服务器创建新用户

无论是创建新用户还是删除某个用户&#xff0c;都需要拿到root用户的密码&#xff0c;才有权限创建删除。 创建新用户 首先进入root账户&#xff0c;输入以下指令&#xff0c;created_name 是我们创建的用户名&#xff0c;可以换成你想要创建的用户名称。 useradd -m -s /bi…

LINUX--创建新用户为新用户设置权限

文章目录 【一张图总结】【详细说明】1、登录root2、新建用户并创建家目录3、更改为bash命令4、设置密码5、设置sudo权限 【关于本文Linux命令的说明】1、useradd -d /home/xpt -m xpt2、usermod -s /bin/bash xpt3、sudo passwd xpt4、sudo chmod uw /etc/sudoers5、sudo vi /…

Linux系统通过命令行创建新的普通用户

以下操作在root账户或权限下执行&#xff01;&#xff01;&#xff01; 目录 1. 创建用户 2. 删除用户 1. 创建用户 创建用户分两步&#xff1a; (1) 使用adduser创建用户名 adduser 创建的用户名 (2) 设置创建用户名的密码 passwd 创建的用户名 然后就可以使用创建的用户登…

Linux-创建用户组和用户

目录 1.前提 2.用户组 3.用户 4.其他 1.前提 创建用户组和用户均需要管理员权限&#xff0c;要么是 root 用户&#xff0c;要么是现用户有 sudo 权限。 下面的命令大部分是基于 sudo 权限 2.用户组 创建用户组 sudo groupadd 组名 查看用户组 cat /etc/group 删除用…

Citespace教程笔记

1 Citespace分析和解读策略 课程连接&#xff1a;citespace教程-陈超美老师亲自教学_哔哩哔哩_bilibili 分析结果那些重要&#xff0c;那些次要&#xff0c;要从主到次地分析。 2 Citespace软件界面简介 2.1 Citespace功能参数界面 2.2 Citespace可视化界面 可视化界面的简介…

TLS Ciphers

传输层安全性协议&#xff08;英语&#xff1a;Transport Layer Security&#xff0c;缩写作TLS&#xff09;&#xff0c;及其前身安全套接层&#xff08;Secure Sockets Layer&#xff0c;缩写作SSL&#xff09;是一种安全协议 定义 协议 年份 SSL 1.0 未知 SSL 2.0 199…

NO Ciphertext RSA -BugkuCTF

题目 附件 这里给了dp&#xff0c;可以根据dp爆破出p&#xff0c;q n dp e 65537 for x in range(1, e):if(e*dp%x1):p(e*dp-1)//x1if(n%p!0):continue print(p,p) q n//p print(q,q) 现在来到了难点&#xff0c;c不知如何去求&#xff0c;这里给了leak_c1&#xff0c…

[DiceCTF 2023] rSabin

一点点学习别人的WP&#xff0c;这回看到一个大姥(r3kapig)的帖子&#xff0c;DiceCTF第二名&#xff0c;不过有好多东西一时还理解不了&#xff0c;得慢慢来。 题目 这个题有3个功能&#xff1a; rsa加密功能&#xff0c;p,q,N未知&#xff0c;e17低加密指数 解密&#xff0c;…