在NodeJS中操作数据的最佳方式是什么?
我正在编写一个从广告平台获取一些数据的应用程序。 我的数据结构如下所示:
{ campaign_id: 123, campaign_name: SomeName, subcampaigns: [ {country: Australia, impressions: 12000, cost: 12}, {country: Australia, impressions: 14000, cost: 17}, {country: Singapore, impressions: 10000, cost: 7}, {country: Singapore, impressions: 7000, cost: 6} ] }
我需要把它变成这样的东西:
[{ campaign_name: SomeName, country: Australia, impressions: 36000 cost: 29 }, { campaign_name: SomeName, country: Singapore impressions: 17000 cost: 13 }]
在NodeJS中做这种Map-Reduce操作的最好方法是什么?
谢谢。
一种可能的方法:
var groupedSubcampaigns = _.groupBy(data.subcampaigns, 'country'); var summator = function(memo, el) { return memo + el; }; var result = _.map(groupedSubcampaigns, function(group, country) { return { campaign_name: data.campaign_name, country: country, impressions: _.reduce(_.pluck(group, 'impressions'), summator, 0), cost: _.reduce(_.pluck(group, 'cost'), summator, 0) } }); console.log(result);
演示 (不知何故,很难find一个node.js在线键盘与包括外部库的选项,但我猜jsfiddle在这种情况下将正常工作)。
解释…呃,其实我相信这里的代码是相当自我解释的。 )首先,我们创build一个按照国家分组的子分组的散列,然后我们用_.map
这个散列的每个项目,用“ _.map
”函数减less它的impressions
和cost
属性。
然而,还有一个改进的空间:你可以放下pluck
方法,并通过一个简单的减less来完成收集,如下所示:
var summator = function(memo, el) { memo.impressions += el.impressions; memo.cost += el.cost; return memo; }; var result = _.map(groupedSubcampaigns, function(group, country) { var aggregateObj = _.reduce(group, summator, {impressions:0, cost:0}); return _.extend(aggregateObj, { campaign_name: data.campaign_name, country: country }); });
演示 。