在前端开发中,我们经常会用到 Map 和 Set 这两种数据结构。Map 是一种键值对的集合,而 Set 是一种无序的、唯一的值的集合。在某些情况下,我们需要将 Map 或 Set 转换成普通的对象,或者将普通的对象转换成 Map 或 Set。
在 ES10 中,新增了一个 Object.fromEntries() 方法,它可以将一个由键值对组成的数组转换成一个对象。利用这个方法,我们可以很方便地实现 Map 和 Set 类型的转换。
将 Map 转换成普通对象
假设我们有一个 Map,它的键是字符串类型,值是数字类型:
const myMap = new Map([ ['foo', 1], ['bar', 2], ['baz', 3] ]);
现在我们想将它转换成一个普通的对象,可以使用 Object.fromEntries() 方法:
const myObj = Object.fromEntries(myMap); console.log(myObj); // {foo: 1, bar: 2, baz: 3}
我们将 Map 作为参数传递给 Object.fromEntries(),它会返回一个由 Map 中的键值对转换成的普通对象。这个方法的作用类似于 Object.entries(),不同之处在于它是将数组转换成对象,而不是将对象转换成数组。
将普通对象转换成 Map
假设我们有一个普通的对象,它的属性名是字符串类型,属性值是数字类型:
const myObj = { foo: 1, bar: 2, baz: 3 };
现在我们想将它转换成一个 Map,可以使用 Object.entries() 方法和 Map 构造函数:
const myMap = new Map(Object.entries(myObj)); console.log(myMap); // Map(3) {"foo" => 1, "bar" => 2, "baz" => 3}
我们先使用 Object.entries() 将普通对象转换成一个由键值对组成的数组,然后将这个数组作为参数传递给 Map 构造函数,它会返回一个新的 Map 对象。
将 Set 转换成普通数组
假设我们有一个 Set,它包含一些字符串:
const mySet = new Set(['foo', 'bar', 'baz']);
现在我们想将它转换成一个普通的数组,可以使用 Array.from() 方法:
const myArr = Array.from(mySet); console.log(myArr); // ["foo", "bar", "baz"]
我们将 Set 作为参数传递给 Array.from(),它会返回一个由 Set 中的值转换成的数组。
将普通数组转换成 Set
假设我们有一个普通的数组,它包含一些字符串:
const myArr = ['foo', 'bar', 'baz'];
现在我们想将它转换成一个 Set,可以使用 Set 构造函数:
const mySet = new Set(myArr); console.log(mySet); // Set(3) {"foo", "bar", "baz"}
我们将数组作为参数传递给 Set 构造函数,它会返回一个新的 Set 对象。
总结
使用 ES10 的 Object.fromEntries() 方法,我们可以很方便地实现 Map 和 Set 类型的转换。这个方法的使用非常简单,但是它可以让我们的代码更加简洁和易于理解。在实际开发中,我们可以根据具体的需求选择合适的转换方式,从而提高代码的可读性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658a2acceb4cecbf2df5cbee