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

👩 个人主页:不爱吃糖的程序媛
🙋‍♂️ 作者简介:前端领域新星创作者、CSDN内容合伙人,专注于前端各领域技术,成长的路上共同学习共同进步,一起加油呀!
✨系列专栏:前端面试宝典JavaScript进阶vue实战
📢 资料领取:前端进阶资料以及文中源码可以在🎈公众号“不爱吃糖的程序媛”领取💖

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

JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。

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

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

将数组转为对象

1.Object.fromEntries方法

const newArray = [
  ['key 1', 'value 1'],
  ['key 2', 'value 2']
]
Object.fromEntries(newArray) // { key 1: "value 1", key 2: "value 2"}

2.Map方法

ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

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')

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

3.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' }

4.Underscore 和 Lodash工具集合框架

Lodash是一个具有一致接口、模块化、高性能的JavaScript工具库。一开始Lodash只是Underscore.js的一个fork,之后再原有的成功基础上取得了更大的成果,lodash的性能远远的超过了Underscore。
官网文档:https://www.lodashjs.com/

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' }

将对象转为数组

1. Object.entries方法

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

const object = { key1: 'value1', key2: 'value2' }
const array = Object.entries(object) // [ ["key1", "value1"], ["key2", "value2"] ]
  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛夏天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值