当前位置: 首页 > 知识库问答 >
问题:

对象数组上groupby的最有效方法

严嘉良
2023-03-14

对数组中的对象进行分组的最有效的方法是什么?

例如,给定对象数组:

[ 
    { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" },
    { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" },
    { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" },
    { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" },
    { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" },
    { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "30" },
    { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "35" },
    { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "40" }
]

我正在表中显示此信息。我想通过不同的方法进行分组,但我想求和这些值。

我使用underscore.js来实现它的groupby函数,这很有帮助,但并不能完成全部任务,因为我不希望它们“拆分”,而是“合并”,更像SQLgroupby方法。

我正在寻找的将能够总计特定的值(如果请求)。

因此,如果我执行了groupbyphase,我希望收到:

[
    { Phase: "Phase 1", Value: 50 },
    { Phase: "Phase 2", Value: 130 }
]

如果我执行了分组阶段/步骤,我将收到:

[
    { Phase: "Phase 1", Step: "Step 1", Value: 15 },
    { Phase: "Phase 1", Step: "Step 2", Value: 35 },
    { Phase: "Phase 2", Step: "Step 1", Value: 55 },
    { Phase: "Phase 2", Step: "Step 2", Value: 75 }
]

是否有对此有用的脚本,或者我应该坚持使用Underscore.js,然后循环遍历结果对象来自己进行合计?

共有1个答案

贝嘉泽
2023-03-14

如果您希望避免使用外部库,可以简明地实现groupby()的常规版本,如下所示:

null

js lang-js prettyprint-override">var groupBy = function(xs, key) {
  return xs.reduce(function(rv, x) {
    (rv[x[key]] = rv[x[key]] || []).push(x);
    return rv;
  }, {});
};

console.log(groupBy(['one', 'two', 'three'], 'length'));

// => {3: ["one", "two"], 5: ["three"]}
 类似资料:
  • 问题内容: 在数组中对对象进行分组的最有效方法是什么? 例如,给定此对象数组: 我正在表格中显示此信息。我想对不同的方法进行分组,但是我想对这些值求和。 我将Underscore.js用于其groupby函数,这很有用,但并不能解决所有问题,因为我不希望它们“分裂”而是“合并”,更像SQL 方法。 我正在寻找的是能够总计特定值(如果要求)。 因此,如果我进行了groupby ,我希望收到: 如果我

  • 本文向大家介绍对Java对象数组进行分组的最有效方法,包括了对Java对象数组进行分组的最有效方法的使用技巧和注意事项,需要的朋友参考一下 在js中对象数组上按键分组的最有效方法是使用reduce函数。 该方法在数组的每个元素上执行reducer函数(由您提供),从而产生单个输出值。 示例 输出结果 这将给出输出-

  • 我正在尝试寻找一个子< code>O(n)方法来计算一个整数数组的和~~~(不是遍历< code>0 - n,我是在< code>n/2中做的)~~~我还是在O(n)中做的。 我的算法适用于偶数个整数,但是,当整数数为奇数时,它会将中间索引求和两次: 测试: 输出: 我的问题是——对奇数的中间索引求和的最佳方法是什么?

  • 在numpy数组上映射函数最有效的方法是什么?我在当前项目中的做法如下: 然而,这看起来可能是非常低效的,因为我使用列表理解来构造新的数组作为Python列表,然后再将其转换回Numpy数组。 我们能做得更好吗?

  • 问题内容: 在numpy数组上映射函数的最有效方法是什么?我在当前项目中所做的工作如下: 但是,这似乎效率很低,因为我正在使用列表推导将新数组构造为Python列表,然后再将其转换回numpy数组。 问题答案: 我测试过的所有建议的方法,加上与(我的一个小项目)。 消息1:如果可以使用numpy的本机函数,请执行此操作。 如果你想已经矢量化功能的矢量(如在原岗位的例子),使用的是多比什么都更快(注

  • 问题内容: 信不信由你,在分析当前代码后,numpy数组还原的重复操作将占用大量的运行时间。我现在拥有的是基于视图的常见方法: 还有其他方法可以更有效地执行此操作,还是我对不切实际的numpy性能的痴迷所致的幻觉? 问题答案: 创建时,您正在创建原始数组的视图。然后,您可以更改原始数组,并且视图将更新以反映所做的更改。 您是否经常需要重新创建视图?您应该能够执行以下操作: 我不是numpy专家,但