使用 Underscore JS 对 JSON 数组进行分组和聚合

2024-01-03

我有一个 json 数组对象。我想根据“FlexCategoryName”列对数据进行分组,并对矩阵列执行聚合,例如“成本”平均值、“点击”总和等。下面是 JSON 数组对象

Array[100]
0: Object
1: Object
2: Object
3: Object

0:对象

Clicks: 1067
Cost: 4094.2
Date: "2/8/2014"
FlexCategoryName: "Cat1"
Impressions: 65943
Leads: 20

地点_ID:1

1:对象

Clicks: 106
Cost: 409
Date: "2/8/2014"
FlexCategoryName: "Cat2"
Impressions: 65941
Leads: 21
VENUE_ID:1

2:对象

Clicks: 106
Cost: 409
Date: "2/8/2014"
FlexCategoryName: "Cat2"
Impressions: 10
Leads: 21
VENUE_ID:2

3:对象

Clicks: 106
Cost: 409
Date: "2/8/2014"
FlexCategoryName: "Cat3"
Impressions: 10
Leads: 21
VENUE_ID:2

4:对象

Clicks: 20
Cost: 10
Date: "2/8/2014"
FlexCategoryName: "Cat5"
Impressions: 10
Leads: 21
 VENUE_ID:3

如何使用Underscore JS 对矩阵列进行分组和聚合。

预期输出

0: Object
Cost: sum of all cost based on FlexCategoryName Cat1
FlexCategoryName: "Cat1"
Impressions: sum of all Impressions based on FlexCategoryName Cat1

1: Object
Cost: sum of all cost based on FlexCategoryName Cat2
FlexCategoryName: "Cat2"
Impressions: sum of all Impressions based on FlexCategoryName Cat2

var _ = require("underscore");
function sum(numbers) {
    return _.reduce(numbers, function(result, current) {
        return result + parseFloat(current);
    }, 0);
}
var result = _.chain(data)
    .groupBy("FlexCategoryName")
    .map(function(value, key) {
        return {
            FlexCategoryName: key,
            Cost: sum(_.pluck(value, "Cost")),
            Impressions: sum(_.pluck(value, "Impressions"))
        }
    })
    .value();

console.log(result);

Output

[ { FlexCategoryName: 'Cat1', Cost: 4094.2, Impressions: 65943 },
  { FlexCategoryName: 'Cat2', Cost: 818, Impressions: 65951 },
  { FlexCategoryName: 'Cat3', Cost: 409, Impressions: 10 },
  { FlexCategoryName: 'Cat5', Cost: 10, Impressions: 10 } ]

如果你想求平均值而不是总和,那么只需更改函数即可。

Edit:如果你想基于多个字段进行分组,你可以像这样嵌套分组

var result = _.chain(data)
    .groupBy("FlexCategoryName")
    .map(function(value, key) {
        return _.chain(value)
            .groupBy("VENUE_ID")
            .map(function(value1, venue_id) {
                return {
                    FlexCategoryName: key,
                    Cost: sum(_.pluck(value1, "Cost")),
                    Impressions: sum(_.pluck(value1, "Impressions")),
                    VENUE_ID: venue_id
                }
            })
            .value();
    })
    .value();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Underscore JS 对 JSON 数组进行分组和聚合 的相关文章

随机推荐

  • JSF 注释不适用于 Spring-boot

    我曾试图使用来自Spring Boot 和 JSF Primefaces Richfaces https stackoverflow com questions 22544214 spring boot and jsf primefaces
  • 如何从 Chrome 扩展程序向本机应用程序发送消息?

    我有一个用 C 编写的本机应用程序 我可以使用以下命令将数据从本机应用程序发送到 chrome 扩展如何从本机应用程序向 Chrome 扩展程序发送消息 https stackoverflow com questions 18134665
  • 连接可选列表

    我有三个Optional gt 必须将它们组合并返回 我尝试使用Optional map and flatmap 但没有成功 public Optional
  • 春季启动日志记录

    我正在使用 Spring boot 构建一个简单的 REST 服务 我想知道处理日志记录的最合适的方法 In my 应用程序属性文件我有以下内容 logging level org springframework web DEBUG 在开发
  • 并行代码可扩展性差

    最近我一直在分析我的并行计算在 16 核处理器上实际上是如何加速的 我得出的一般公式 线程越多 每个核心的速度就越慢 让我很尴尬 以下是我的CPU负载和处理速度的图表 因此 您可以看到处理器负载增加 但速度增加得慢得多 我想知道为什么会发生
  • 如何使用opencv python在对象中找到用于测量目的的参考点? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 输入图像寻找参考点 https i stack imgur com g0Dt1 png 我的问题陈述是我想测量钻头的长度 因此 如果我
  • 如何监视默认导出函数

    sinon spy 有 2 个参数 对象和函数名称 我有一个模块如下所示 module exports function xyz 我如何定义间谍xyz 我没有可以使用的对象名称 想法 如果你使用 ES6 模块导入功能 上面的方法实际上不起作
  • 使用现有的 pptx 创建新的 pptx Python-Pptx

    我正在尝试使用 old pptx 创建 new pptx old pptx 有 4 张幻灯片 我想在 4 张幻灯片中创建内容几乎相同的 new pptx 仅进行少量文本修改 我跳过了下面代码中的修改部分 您可以举个例子 例如将小写字母转换为
  • 导入 shapefile 外部的遮罩区域(底图/matplotlib)

    我正在通过 Matplotlib 在美国和加拿大东海岸的底图上绘制数据 除了基础层 填充的等值线图 之外 我还使用 Matplotlib 的 readshapefile 工具将此焦点区域的 shapefile 覆盖在数据之上 我想知道如何屏
  • 将蛋糕脚本中的警告消息记录在文本文件中

    我正在使用下面的蛋糕脚本来编译我的C 项目 中显示的警告消息很少PowerShell执行脚本时 我喜欢将警告记录在物理位置的文本文件中 例如 D WarningReport txt 下面是我用来编译项目的蛋糕脚本任务 Task Build
  • 使用JNI而不是JNA调用本机代码?

    与 JNI 相比 JNA 似乎更容易用来调用本机代码 在什么情况下您会使用 JNI 而不是 JNA JNA 不支持 C 类的映射 因此如果您使用 C 库 则需要 jni 包装器 如果你需要大量的内存复制 例如 您调用一个方法 该方法返回一个
  • 在 Pygame 上播放 midi

    好的 这就是我得到的 import pygame import sys from pygame locals import bif bg jpg mif pkmn png sif bubble png song 1 testaudio mi
  • base64 解码的文件不等于原始未编码的文件

    我有一个普通的pdf文件 A pdf 第三方以base64对该文件进行编码 并将其作为长字符串在网络服务中发送给我 我无法控制第三方 我的问题是 当我使用 java org apache commons codec binary Base6
  • 什么是好的、众所周知的 JavaScript MVC 模式?

    在 ASP NET MVC 应用程序中管理 JavaScript 文件和函数 对象上下文的最佳方法是什么 谷歌说http javascriptmvc com http javascriptmvc com
  • 在 Quartz 作业中使用 CDI

    我想知道是否可以在 Quartz 作业中以可移植的方式使用 CDI bean 我已经尝试编写自己的 JobFactory 等 但问题是 BeanManager 无法通过 JNDI 使用 因为作业在非托管线程中运行 我的应用程序服务器是 We
  • React组件的render函数中返回DOM元素

    我有一个外部库 可以呈现一些自定义 js 控件 该库返回一个可以插入到页面中的 DOM 元素 我正在 React 中为这个库创建包装器 我已经将所有内容都连接起来 但我不确定如何允许渲染函数接受 DOM 元素作为其返回 render if
  • 如何在 HtmlAgilityPack 中按类获取元素

    你好 我制作 HttpWebResponse 并获取包含我需要的所有数据的 Html 页面 例如带有日期信息的表 我需要将它们保存到数组列表并将其保存到 xml 文件 html 页面示例 table tr td class padding5
  • 如何在 元素内创建标签?

    我想在输入元素内插入描述性文本 当用户单击它时该描述性文本就会消失 我知道这是一个很常见的技巧 但我不知道该怎么做 最简单 更好的解决方案是什么 如果您使用的是 HTML5 则可以使用placeholder属性
  • 这是什么样的排序?

    假设我有一个整数列表 其中每个元素都是 1 到 20 之间的数字 这不是我要排序的内容 现在 我有一个 操作 数组 其中每个操作 Removes列表中的某些 已知 数字 and Adds列表中的某些其他 已知 号码 and如果列表在操作开始
  • 使用 Underscore JS 对 JSON 数组进行分组和聚合

    我有一个 json 数组对象 我想根据 FlexCategoryName 列对数据进行分组 并对矩阵列执行聚合 例如 成本 平均值 点击 总和等 下面是 JSON 数组对象 Array 100 0 Object 1 Object 2 Obj