通过使用 Lodash 如何为分组输出添加自己的键?

Lodash 是 JavaScript 的一个有用工具库,提供了许多方便的函数来处理数组、对象和字符串等常见数据类型。在前端开发中,我们经常需要对数据进行分组操作,并将其按照不同的标准进行分类。Lodash 提供了 groupBy() 函数,可以快速地对数据进行分组操作。但默认情况下,groupBy() 返回的是一个以分组属性为键值,以分组结果为值的对象。如果我们想要为分组结果添加自定义的键,该怎么做呢?本文将介绍如何使用 Lodash 进行自定义分组输出的操作。

什么是自定义分组输出?

在 Lodash 的 groupBy() 函数中,数据分组的标准由传入的回调函数决定。这个回调函数接受当前迭代项作为参数,并返回一个字符串或者其他可以被当做键的值。例如,我们可以使用 groupBy() 将以下数据按照它们的年份进行分组:

----- ---- - -
  - ----- -------- ----- ---- --
  - ----- ------ ----- ---- --
  - ----- ---------- ----- ---- --
--
----- ------ - --------------- ---- -- -----------
--------------------
-- ---
-- -
--   ------- -
--     - ------- -------- ------- ---- --
--     - ------- ------ ------- ---- -
--   --
--   ------- -
--     - ------- ---------- ------- ---- -
--   -
-- -

在默认情况下,groupBy() 返回的结果中,键值为分组属性(即 year),值是一个包含所有符合该属性值的项的数组。不过,在实际开发中,我们可能需要将分组结果转换为另一种数据结构,例如一个对象或者一个包含自定义键的数组。

假设我们希望将分组结果按照年份和性别进行分类,并给每个组添加一个 count 属性表示该组中的项数。那么我们可以这样写:

----- ------ - -------------
  ------------- -- ---------------------------
  --------------------- -- --
    ------ ------------------
    ------ -----------
  ---
  ---------
--------------------
-- ---
-- -
--   -------------- -
--     -------- --
--     -------- -- ------- -------- ------- ----- ------ -------- --
--   --
--   ------------ -
--     -------- --
--     -------- -- ------- ------ ------- ----- ------ ------ --
--   --
--   ------------ -
--     -------- --
--     -------- -- ------- ---------- ------- ----- ------ ------ --
--   -
-- -

在这个例子中,我们首先使用 groupBy() 将数据按照年份和性别进行分组,然后使用 mapValues() 函数将每个分组的结果转换为一个包含了 countitems 键的对象,并返回一个新的对象。

如何添加自己的键?

在上面的例子中,我们通过 mapValues() 函数将每个分组的结果转换为一个新的对象,这样就可以为其添加自定义的键。如果你想要给每个分组的项都添加一个自定义的属性,那么可以使用 Lodash 的 map() 函数来实现:

----- ------ - -------------
  ------------- -- ---------------------------
  --------------- -- --
    ------ ------------------
    ------ ----------------- ---- -- -- -------- ---- ---- - --------- ----
  ---
  ----------
  ---------
--------------------
-- ---
-- -
--

- ----------------------------------------------------------- --------
---------------------------------------------------------------------------------------