用Underscore.JS对多个值进行分组,但保留键和值

阅读时长 4 分钟读完

在前端开发中,我们经常需要将数据按照某些条件进行分组。Underscore.JS是一个很好的JavaScript库,它提供了许多方便的函数来处理集合数据,包括分组函数。本文将介绍如何使用Underscore.JS的groupBy函数对多个值进行分组,同时保留原始键和值。

groupBy函数简介

首先,让我们看一下groupBy函数的基本语法:

该函数接受三个参数:

  • list: 要分组的集合数据。
  • iteratee: 一个迭代函数,它会被应用到每个元素上以确定其所属的组别。
  • context (可选): 迭代函数的上下文。

groupBy函数将返回一个对象,其中每个属性都是一个数组,包含具有相同组别的元素。

按单个值进行分组

让我们从最简单的情况开始,假设我们有以下一组名字和成绩数据:

如果我们想按照成绩将这些人分组,可以使用以下代码:

这将产生以下结果:

注意到每个分组都包含一个对象,该对象的键是成绩值,而值是一个数组,其中包含具有相同成绩值的人名。

按多个值进行分组

现在假设我们有一个更复杂的数据集,其中每个对象都有两个属性:name和score。我们想按照score和name将这些对象分组,并且仍然保留原始的键和值。例如,如果我们有以下数据:

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

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

那么我们可以使用以下代码对数据进行分组:

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

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

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

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

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

这将产生以下结果:

注意到每个分组现在都是一个对象,其中键是人名,值是成绩。我们使用split函数将组合的键拆分成原始值,并从每个元素中提取出name和score属性。然后,我们使用if语句来创建新的score属性(如果还不存在),并将得分添加到相应的name属性中。

总结

Underscore.JS提供了强大而灵活的groupBy函数,使我们可以轻松地对集合数据进行分组。通过了解如何按多个值进行分组,我们可以更有效地处理更复杂的数据结构,并保留原始键和值。希望这

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

纠错
反馈