在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它的impressionscost属性。

然而,还有一个改进的空间:你可以放下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 }); }); 

演示