2016-04-22 45 views
0

我试图使用mapreduce来计算每月的销售量和图表,稍后使用chart.js。在javascript中使用map reduce

假设我有一个带有字段,金额和日期的JSON响应。

对于我的地图功能,我拿出一个月:

month = _.map([items[i].transactionDate], function(date) { 
    return { 
     lables: items[i].transactionDate.slice(5,7) 
    }; 
}); 

,并为我减少功能......嗯,我不知道在这里做什么。

sum = _.reduce([items[i].amt], function(memo, num) { 
     return memo + items[i].amt 
    }); 

我意识到这最终不会计算每月的总额。问题是我不知道如何正确地把这两个功能联系起来。

编辑:每请求,我的JSON:

"items": [ 
{ 
"_id": "56d1cf3704aee3c68d89cc09", 
"amt": 5, 
"transactionDate": "2016-02-27T16:30:47.561Z", 
} 
] 

什么我试图摆脱这种每月销量在图上。到目前为止,我已经能够计算几个月和总销售额,但不是每个特定月份的销售额。

+1

你能告诉你JSON吗? – ThisMan

+1

你能更清楚地了解数据的外观吗?也许是一小段数据格式。你在最终输出中究竟寻找什么? –

+0

增加了更多细节。 –

回答

1

我想,只是让一个循环与添加新的变量

let result= {}; 

_.forEach(items, (item) => { 
    // get month 
    let month = item.transactionDate.slice(5,7); 
    // get amount 
    let amount = item.amt; 

    // check if we have this month in finaly object 
    if(month in finaly) { 
     // added amount 
     result[month] += amount; 
    } else { 
     // if this month doesn't exist added with inital value 
     result[month ] = amount; 
    } 
}); 

当你可以得到某月的所有金额或获得的所有月份总和

let allSum = _.reduce(result, (sum, amount) => sum += amount); 
let amountInCertainMonth = result["01"]; 
1

mapreduce是阵列的函数迭代这个数组为你

map返回一个新的阵列与所述映射函数的结果为每个元素

var months = items.map (item => item.transactionDate.slice(5,7)) 

reduce施加减小功能到每个元素和一个累加器。

var sum = items.reduce((accum, item) => accum + item.amt , 0); 
0

我认为items[i]是具有.transactionsDate.amt作为具有相应索引的两个数组的对象。如果是这样,您可以从{ totalSales, months }开始,每月销售额和总销售额在一个reduce函数中。

var chartData = items[i].transactionDate.reduce(function(total, month, index) { 
    var monthlyData = { 
     label: month.slice(5, 7), 
     sales: items[i].amt[index] 
    }; 
    total.months.push(monthlyData); 
    total.totalSales += item.amt; 
    return total; 
}, { 
    totalSales: 0, months: [] 
}); 

// get total sales 
var totalSales = chartData.totalSales; 
// get sales for May starting at index 0 
var salesForMay = chartdata.months[4]; 

让我知道这是你在找什么。