当前位置: 首页 > 面试题库 >

JavaScript在对象数组上分组的最有效方法

邵诚
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函数,这很有用,但并不能解决所有问题,因为我不希望它们“分裂”而是“合并”,更像SQL group by方法

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

因此,如果我进行了groupby Phase,我希望收到:

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

如果我进行了分组Phase/ Step,则会收到:

[
    { 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,然后循环遍历生成的对象来自己做总计?


问题答案:

如果要避免使用外部库,则可以简洁地实现groupBy()如下所示的原始版本:

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的本机函数,请执行此操作。 如果你想已经矢量化功能的矢量(如在原岗位的例子),使用的是多比什么都更快(注