使用下划线映射Reduce



我正在尝试转换以下数据集:

var foo = {
        "2011":
            [{ "date": "2011-08-01T00:00:00", "y": "100" },
             { "date": "2011-08-05T00:00:00", "y": "400" },
             { "date": "2011-09-01T00:00:00", "y": "900" }
            ],
        "2012": 
           [{ "date": "2012-07-22T00:00:00", "y": "200" },
            { "date": "2012-09-22T00:00:00", "y": "430" },
            { "date": "2012-10-26T00:00:00", "y": "100" }
           ]
       }

变成这样:

var foo1 = {
        "2011":
            [{ "y": "1400" }],
        "2012": 
            [{ "y": "730" }]
       }

使用下划线的最好方法是什么?提前感谢!

Underscore没有对象映射的实用程序。我们必须用_.object(_.keys(…), _.map(_.values(…), …))_.clone来模拟对象,通过_.each迭代它并手动分配。让我们更好地扩展库以获得更具可读性的代码:

_.mixin({
    mapObject: function(obj, iterator, context) {
        return _.each(_.clone(obj), function(items, p, o) {
             o[p] = iterator.apply(this, arguments);
        }, context);
    }
});
var foo1 = _.mapObject(foo, function(items) {
    return [{y: _.reduce(_.map(_.pluck(items, "y"), Number), function(m, y) {
         return m + y;
    }, 0) }];
});

最新更新