如何使用 ES8 的 Object.fromEntries() 方法转换 JavaScript 对象形式

在 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" }

在上面的代码中,mergedObjobj1obj2 的合并结果,因为这两个对象中都包含了 name 属性,所以 obj1 中的 name 属性被 obj2 中的 name 属性所覆盖了。

与此相反的是,Object.fromEntries() 不会出现属性值被覆盖的情况。

总结

  • 使用 Object.fromEntries() 方法可以将一个键值对数组转化为对象。
  • 可以通过 Object.entries() 方法将对象转化为键值对数组,并在使用 Object.fromEntries() 方法时作为参数传入。
  • Object.assign() 方法可以将两个对象进行合并,但存在属性值覆盖的风险。
  • Object.fromEntries() 在将数据格式转化时非常有用,可以让代码更加简洁高效。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659e44faadd4f0e0ff7498b7


纠错反馈