Lodash 是 JavaScript 的一个有用工具库,提供了许多方便的函数来处理数组、对象和字符串等常见数据类型。在前端开发中,我们经常需要对数据进行分组操作,并将其按照不同的标准进行分类。Lodash 提供了 groupBy()
函数,可以快速地对数据进行分组操作。但默认情况下,groupBy()
返回的是一个以分组属性为键值,以分组结果为值的对象。如果我们想要为分组结果添加自定义的键,该怎么做呢?本文将介绍如何使用 Lodash 进行自定义分组输出的操作。
什么是自定义分组输出?
在 Lodash 的 groupBy()
函数中,数据分组的标准由传入的回调函数决定。这个回调函数接受当前迭代项作为参数,并返回一个字符串或者其他可以被当做键的值。例如,我们可以使用 groupBy()
将以下数据按照它们的年份进行分组:
-- -------------------- ---- ------- ----- ---- - - - ----- -------- ----- ---- -- - ----- ------ ----- ---- -- - ----- ---------- ----- ---- -- -- ----- ------ - --------------- ---- -- ----------- -------------------- -- --- -- - -- ------- - -- - ------- -------- ------- ---- -- -- - ------- ------ ------- ---- - -- -- -- ------- - -- - ------- ---------- ------- ---- - -- - -- -
在默认情况下,groupBy()
返回的结果中,键值为分组属性(即 year),值是一个包含所有符合该属性值的项的数组。不过,在实际开发中,我们可能需要将分组结果转换为另一种数据结构,例如一个对象或者一个包含自定义键的数组。
假设我们希望将分组结果按照年份和性别进行分类,并给每个组添加一个 count
属性表示该组中的项数。那么我们可以这样写:
-- -------------------- ---- ------- ----- ------ - ------------- ------------- -- --------------------------- --------------------- -- -- ------ ------------------ ------ ----------- --- --------- -------------------- -- --- -- - -- -------------- - -- -------- -- -- -------- -- ------- -------- ------- ----- ------ -------- -- -- -- -- ------------ - -- -------- -- -- -------- -- ------- ------ ------- ----- ------ ------ -- -- -- -- ------------ - -- -------- -- -- -------- -- ------- ---------- ------- ----- ------ ------ -- -- - -- -
在这个例子中,我们首先使用 groupBy()
将数据按照年份和性别进行分组,然后使用 mapValues()
函数将每个分组的结果转换为一个包含了 count
和 items
键的对象,并返回一个新的对象。
如何添加自己的键?
在上面的例子中,我们通过 mapValues()
函数将每个分组的结果转换为一个新的对象,这样就可以为其添加自定义的键。如果你想要给每个分组的项都添加一个自定义的属性,那么可以使用 Lodash 的 map()
函数来实现:
-- -------------------- ---- ------- ----- ------ - ------------- ------------- -- --------------------------- --------------- -- -- ------ ------------------ ------ ----------------- ---- -- -- -------- ---- ---- - --------- ---- --- ---------- --------- -------------------- -- --- -- - -- - ----------------------------------------------------------- -------- ----------------------------------------------------------------------------------