2016-04-22 82 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]; 

讓我知道這是你在找什麼。