在 ES8 中,引入了 Object.fromEntries()
方法,可以将一个键值对数组转换为一个对象。在一些场景中,我们可能需要将一些数据从一个格式转换为另一个格式,像这种情况下,Object.fromEntries()
可以帮助我们实现这个功能,让我们更加高效地处理数据。
使用方法
Object.fromEntries()
方法接收一个键值对数组作为参数,返回一个新的对象。键值对数组中的每个元素代表一个属性的键值对,其中第一个元素表示属性名,第二个元素代表属性对应的值。以下是调用示例:
const arr = [["name", "Jessica"], ["age", 28], ["gender", "female"]]; const obj = Object.fromEntries(arr); console.log(obj); // { name: "Jessica", age: 28, gender: "female" }
在上面的代码中,数组 arr
包含了三个元素,每个元素都是一个由两个值组成的子数组,代表了三个属性的键值对。通过调用 Object.fromEntries()
,将这个数组转化为新的对象 obj
。
由 Object.entries() 方法转换而来
有些情况下,我们想要将一个对象转化为另一个格式。针对这种情况,JavaScript 引入了 Object.entries()
方法,用于将对象转换为键值对数组。在这种情况下,我们只需要将 Object.entries()
的返回结果作为参数传递给 Object.fromEntries()
,就可以将对象转化为另一种格式。
const obj = { name: "Jessica", age: 28, gender: "female" }; const arr = Object.entries(obj); console.log(arr); // [["name", "Jessica"], ["age", 28], ["gender", "female"]] const convertedObj = Object.fromEntries(arr); console.log(convertedObj); // { name: "Jessica", age: 28, gender: "female" }
从上述代码中可以看出,Object.entries()
方法将对象 obj
转化为了一个包含了三个元素的数组,其中每个元素都是一个由两个值组成的子数组。我们将这个数组传递给 Object.fromEntries()
,就可以将数组转化为新的对象 convertedObj
。
需要注意的是,如果传入的是空数组,则 Object.fromEntries()
方法的返回值将是一个空对象 {}
。
与 Object.assign() 方法的区别
在 JavaScript 中,我们还可以使用 Object.assign()
方法将两个对象合并在一起,生成一个新的对象。和 Object.fromEntries()
方法不同的是,Object.assign()
方法会将源对象中的所有属性覆盖到目标对象中,如果两个对象中有相同的属性名,则目标对象中的属性值会被源对象中的属性值所覆盖。
const obj1 = { name: "Jessica", age: 28 }; const obj2 = { name: "John", gender: "male" }; const mergedObj = Object.assign(obj1, obj2); console.log(mergedObj); // { name: "John", age: 28, gender: "male" }
在上面的代码中,mergedObj
是 obj1
和 obj2
的合并结果,因为这两个对象中都包含了 name
属性,所以 obj1
中的 name
属性被 obj2
中的 name
属性所覆盖了。
与此相反的是,Object.fromEntries()
不会出现属性值被覆盖的情况。
总结
- 使用
Object.fromEntries()
方法可以将一个键值对数组转化为对象。 - 可以通过
Object.entries()
方法将对象转化为键值对数组,并在使用Object.fromEntries()
方法时作为参数传入。 Object.assign()
方法可以将两个对象进行合并,但存在属性值覆盖的风险。Object.fromEntries()
在将数据格式转化时非常有用,可以让代码更加简洁高效。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659e44faadd4f0e0ff7498b7