首先,软件开发定制我们要明白对象具有键和值。
JavaScript 的对象(Object),软件开发定制本质上是键值对的集合( 结构),软件开发定制但是传统上只能用字符串当作键。
软件开发定制如果我们想把某个东西转换成一个对象,我们需要传递具有这两个要求的东西:键和值。
满足这些要求的参数有两种类型:
- 具有嵌套键值对的数组
- 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"}
- 1
- 2
- 3
- 4
- 5
2.Map方法
ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于,各种类型的值(包括对象)都可以当作键。
也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。
const map = new Map([ ['key 1', 'value 1'], ['key 2', 'value 2']])// 或者我们可以使用实例方法 setconst 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"}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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' }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
4.Underscore 和 Lodash工具集合框架
Lodash是一个具有一致接口、模块化、高性能的JavaScript工具库。一开始Lodash只是Underscore.js的一个fork,之后再原有的成功基础上取得了更大的成果,lodash的性能远远的超过了Underscore。
官网文档:https://www.lodashjs.com/
Underscore 和 Lodash 也可将键值对转换为对象。
_.object — 将阵列转换为对象。传递单个[键、值]对列表,或键列表和值列表。
// Underscoreconst array = [ ['key1', 'value1'], ['key2', 'value2']]_.object(array) // { key1: 'value1', key2: 'value2' }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
_.fromPairs — 此方法返回由键值对组成的对象。
// Lodashconst array = [ ['key1', 'value1'], ['key2', 'value2']]_.fromPairs(array) // { key1: 'value1', key2: 'value2' }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
将对象转为数组
1. Object.entries方法
Object.entries 方法返回一个给定对象自身可枚举属性的键值对数组。
const object = { key1: 'value1', key2: 'value2' }const array = Object.entries(object) // [ ["key1", "value1"], ["key2", "value2"] ]
- 1
- 2