在 JavaScript 中,我们经常需要将数组转换为对象。ES6 中引入了 Object.assign()
方法,可以方便地将数组转换为对象,但是这种方法只适用于键值对具有相同属性名的情况。在 ES8 中,我们可以使用 Object.fromEntries()
方法,实现更灵活的数组转换为对象的形式。
Object.fromEntries 方法详解
Object.fromEntries()
方法是 ES8 新增的方法,它允许我们将一个由键值对组成的二维数组转换为一个对象。我们可以将数组的每一项看作是一个数组,其中第一项代表键名,第二项代表属性值。
Object.fromEntries([[key1, value1], [key2, value2], [key3, value3] ...])
Object.fromEntries 方法的使用示例
下面是一个使用 Object.fromEntries()
方法的示例:
const arr = [['a', 1], ['b', 2], ['c', 3]]; const obj = Object.fromEntries(arr); console.log(obj); // {a: 1, b: 2, c: 3}
在这个示例中,我们创建了一个二维数组 arr
,其中每个子数组的第一项是键名,第二项是对象中该属性的属性值。然后我们将 arr
对象传递给 Object.fromEntries()
方法,返回的是一个包含键值对的对象 obj
。
与 Object.assign() 的比较
Object.assign()
方法是用于将源对象的属性复制到目标对象中的一种方法。虽然它也可以将数组转换为对象,但是它仅能将数组转换为键名相同且值相等的对象。
const arr = [['a', 1], ['b', 2], ['c', 3]]; const obj = Object.assign({}, arr); console.log(obj); // {0: ['a', 1], 1: ['b', 2], 2: ['c', 3]}
在上述示例中,Object.assign()
方法只复制了数组 arr
的属性值,而没有将它们转换为对象的键值对。
使用 Object.fromEntries() 方法进行浅拷贝
由于 Object.fromEntries()
在从二维数组转换为对象时进行了浅拷贝,因此它可以用来创建新对象并复制原始对象的属性。
const obj1 = { a: 1, b: 2, c: 3 }; const arr1 = Object.entries(obj1); const obj2 = Object.fromEntries(arr1); console.log(obj2); // { a: 1, b: 2, c: 3 } console.log(obj1 === obj2); // false
在这个示例中,我们先使用 Object.entries()
方法将原始对象 obj1
转换为二维数组 arr1
,然后再将它传递给 Object.fromEntries()
方法,将 arr1
转换为对象。这样就可以创建一个新的对象,使用它来代替原始对象,而不影响原始对象的值。
总结
通过本文的介绍,我们学习了在 ES8 中使用 Object.fromEntries()
方法将数组转换为对象的方法,并比较了该方法与 Object.assign()
的不同之处。Object.fromEntries()
方法的出现为我们的开发带来了更灵活、更方便的解决方案,我们可以根据具体情况选择不同的方法来实现我们的开发需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ebf77ef6b2d6eab3643fd8