ES10 的 “不完美解决”:Object.fromEntries()

阅读时长 5 分钟读完

在前端开发中,我们经常需要在 JavaScript 中进行对象的转换。其中一个常见的操作是将一个二维数组转换成对象。ES6 中,我们可以使用 Object.entries() 方法将对象转换成一个键值对数组,但是如何将一个键值对数组转换成对象呢?

在 ES10 中,一个新的方法 Object.fromEntries() 被引入,用于将一个键值对数组转换成对象。但是,这种方法并不完美,本文将深入讨论这种方法的优点和缺点,并给出正确的用法指导。

Object.fromEntries() 基本用法

Object.fromEntries() 方法接收一个键值对数组作为参数,然后返回一个新的对象。例如,我们可以通过以下代码将一个二维数组转换成对象:

可以看出,Object.fromEntries() 方法非常简单易用,它可以很方便地将一个键值对数组转换成对象。但是,在实际应用中,我们需要注意一些问题。

缺失的告警信息

当键值对数组中存在重复的键时,Object.fromEntries() 方法将会覆盖之前的键值对。例如:

在这个例子中,原本的键值对数组中有两个 name 字段,当转换为对象时,后者覆盖了前者。这在实际应用中很可能是我们不希望看到的结果。但是,Object.fromEntries() 方法并没有任何告警或者错误信息。

因此,我们需要自己进行一些判断,确保传入的键值对数组中不存在重复的键。例如,可以使用 Set() 对键进行去重:

-- -------------------- ---- -------
----- ------- - -
  -------- ---------
  ------- ----
  -------- ------
--
----- -------- - ------- ---------------------- ------- -- -------------- -- -
  ------ ----- ------------------- --- -- - --- ------------- --- -- ----
---
----- --- - -----------------------------
----------------- -- - ----- --------- ------- ---- -- -
展开代码

在这个例子中,我们首先用 map() 方法将键数组去重,然后再用 filter() 方法筛选出每个键对应的值数组。最后,我们将它们发送给 fromEntries 方法,得到一个正确的对象。

对象转换的安全

Object.fromEntries() 方法有一个非常方便的用法,就是用于从一个对象中提取指定的属性,得到一个新的对象。例如:

在这个例子中,我们先使用 Object.entries() 方法将对象转换成数组,然后使用 filter() 方法过滤出不需要的属性,最后用 Object.fromEntries() 将数组转换成对象。这个方法非常实用,可以帮助我们快速地将一个对象转换成另一个对象。

然而,需要注意的是,如果原对象中存在一些我们不希望暴露的属性,那么这种转换方法会将它们放在新对象中。为了解决这个问题,我们需要使用 Object.assign() 方法,将新对象中的属性合并到一个空对象中:

在这个例子中,我们使用 Object.assign() 将新对象中的属性合并到一个空对象中,这样就可以避免原对象中不需要的属性被暴露出去了。

总之,Object.fromEntries() 方法是一个非常实用的工具,可以帮助我们将键值对数组快速地转换成对象。但是,在使用这个方法时,需要注意一些问题,尤其是键值对中存在重复的键的情况下。除此之外,我们还可以使用这个方法来提取对象中的指定属性,但是需要注意保护原对象中的属性安全。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bc5f11a231b2b7eddeeb71

纠错
反馈

纠错反馈