内置对象链中的标准化:ES9 引入了 Object.fromEntries

在 JavaScript 中,内置对象(Native Objects)是一组 API,它们由实现 JavaScript 引擎的浏览器或 Node.js 内置提供。ES9 引入了一个名为 Object.fromEntries 的新方法,该方法用于将一组键值对转换为对象。

为什么需要 Object.fromEntries?

在 JavaScript 中,经常需要将一组键值对转换为对象。这通常可以通过循环遍历和手动添加属性来实现,如下所示:

const data = [
  ['name', 'Alice'],
  ['age', 25],
  ['gender', 'female']
];

const obj = {};
for (let [key, value] of data) {
  obj[key] = value;
}

console.log(obj); // { name: 'Alice', age: 25, gender: 'female' }

但是,这种方法比较繁琐,需要额外的代码来循环遍历和添加属性。ES9 引入的 Object.fromEntries 方法,可以更简洁地实现同样的效果,如下所示:

const data = [
  ['name', 'Alice'],
  ['age', 25],
  ['gender', 'female']
];

const obj = Object.fromEntries(data);

console.log(obj); // { name: 'Alice', age: 25, gender: 'female' }

可以看到,使用 Object.fromEntries 只需一行代码即可将一组键值对转换为对象。

使用 Object.fromEntries

Object.fromEntries 的语法格式如下:

Object.fromEntries(iterable);

其中,iterable 是一个可迭代对象,它是一个键值对的数组(二维数组)或可迭代的返回一个键值对元组的迭代器对象。

Object.fromEntries 方法将给定的数组或迭代器中的键值对转换为一个新的对象,并以键值对的形式返回该对象。

下面是一个使用数组作为参数的示例:

const data = [
  ['name', 'Alice'],
  ['age', 25],
  ['gender', 'female']
];

const obj = Object.fromEntries(data);

console.log(obj); // { name: 'Alice', age: 25, gender: 'female' }

下面是一个使用迭代器作为参数的示例:

const data = new Map([
  ['name', 'Alice'],
  ['age', 25],
  ['gender', 'female']
]);

const obj = Object.fromEntries(data.entries());

console.log(obj); // { name: 'Alice', age: 25, gender: 'female' }

可以看到,Object.fromEntries 方法可以接受不同的输入类型,并返回一个合并了所有键值对的新对象。

兼容性和可替代性

目前(2021 年 10 月),Object.fromEntries 方法已经被包括在了现代浏览器和 Node.js 中。可以通过以下方式检查浏览器是否支持该方法:

if (typeof Object.fromEntries === 'function') {
  // 浏览器支持 Object.fromEntries 方法
} else {
  // 浏览器不支持 Object.fromEntries 方法
}

对于不支持 Object.fromEntries 方法的浏览器,可以使用以下代码作为替代方案:

const fromEntries = (entries) => {
  const obj = {};
  for (let [key, value] of entries) {
    obj[key] = value;
  }
  return obj;
};

// 使用替代方案
const data = [
  ['name', 'Alice'],
  ['age', 25],
  ['gender', 'female']
];
const obj = fromEntries(data);

console.log(obj); // { name: 'Alice', age: 25, gender: 'female' }

总结

Object.fromEntries 方法是 ES9 中新增的一个方法,它可以将一组键值对转换为对象。使用 Object.fromEntries 方法,可以更简洁地实现同样的效果,并且在可读性和可维护性方面具有优势。但是,在使用 Object.fromEntries 方法之前,需要检查浏览器是否支持该方法,并考虑使用兼容性更好的替代方案。

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


纠错反馈