【问题标题】:Underscore do some calculation and return new object下划线做一些计算并返回新对象
【发布时间】:2025-12-12 16:15:02
【问题描述】:

我有一个这样的时间序列:

[
    {
        "_id": {
            "action": "click",
            "date": "2015-02-02T00:00:00+01:00"
        },
        "total": 5
    },
    {
        "_id": {
            "action": "hit",
            "date": "2015-02-02T00:00:00+01:00"
        },
        "total": 13
    },
    {
        "_id": {
            "action": "hit",
            "date": "2015-02-03T00:00:00+01:00"
        },
        "total": 25
    },
    {
        "_id": {
            "action": "click",
            "date": "2015-02-03T00:00:00+01:00"
        },
        "total": 7
    }
]

我需要做一些计算并返回一个类似的对象,特别是我需要找到点击和点击之间的百分比(同一日期的点击/点击*100)返回一个这样的对象:

[
    {
        "_id": {
            "action": "ctr",
            "date": "2015-02-02T00:00:00+01:00"
        },
        "total": 38.46
    },
    {
        "_id": {
            "action": "ctr",
            "date": "2015-02-03T00:00:00+01:00"
        },
        "total": 28
    }
]

有什么提示吗?

【问题讨论】:

  • 迭代、计算并返回值?
  • 结果中的“action”:“crt”是什么意思?
  • var newArray = oldArray.map(function (value) { return /* do transform */; }); 怎么样?
  • 对不起,它是“ctr”(点击率)
  • 是的,我正在尝试一些 map/groupby/reduce,但我还没有得到正确的结果

标签: javascript underscore.js time-series click-tracking


【解决方案1】:
_.groupBy(array, function(el){ return el._id.date; });

以上将是您如何分组,然后您可以映射并计算您需要的内容。示例:

http://jsfiddle.net/j9Htk/114/

【讨论】:

  • 这只是按日期分组,我还需要在“点击”和“点击”之间进行计算并返回一个新对象“ctr”
  • 为了完整起见,这里是更新的小提琴,以获得问题中要求的确切内容:jsfiddle.net/j9Htk/121Thanks snowman4415