簡體   English   中英

如何將每日數據 object 變成每月數據 object

[英]how to turn a daily data object into a monthly object

所以我有一個問題如何打開這個 object:

let data = [
{"branch": "london", "date": "2020-05-07", "sales": 500},
{"branch": "london", "date": "2020-05-08", "sales": 1500},
{"branch": "london", "date": "2020-05-09", "sales": 1000},
{"branch": "london", "date": "2020-06-09", "sales": 1000},
{"branch": "wales", "date": "2020-05-10", "sales": 2000},
{"branch": "wales", "date": "2020-05-11", "sales": 3000},
{"branch": "wales", "date": "2020-06-12", "sales": 2500},
{"branch": "wales", "date": "2020-08-12", "sales": 1500}
]

進入object:

let monthlyData = [
{"branch": "london", "date": "2020-05", "sales": 3000},
{"branch": "london", "date": "2020-06", "sales": 1000},
{"branch": "wales", "date": "2020-05", "sales": 5000},
{"branch": "wales", "date": "2020-06", "sales": 2500},
{"branch": "wales", "date": "2020-08", "sales": 1500},
]

所以我的目標是讓每個分支機構都給我一個月度記錄而不是每天如何解決這個問題,因為我只是設法做到了,但日期和銷售量擴大了當前的 object 而不是用新的月份數據創建一個新的.

我通過為每個循環使用 2 解決了這個問題

 let data = [ {"branch": "london", "date": "2020-05-07", "sales": 500}, {"branch": "london", "date": "2020-05-08", "sales": 1500}, {"branch": "london", "date": "2020-05-09", "sales": 1000}, {"branch": "london", "date": "2020-06-09", "sales": 1000}, {"branch": "wales", "date": "2020-05-10", "sales": 2000}, {"branch": "wales", "date": "2020-05-11", "sales": 3000}, {"branch": "wales", "date": "2020-05-12", "sales": 2100}, {"branch": "wales", "date": "2020-06-12", "sales": 2500}, {"branch": "wales", "date": "2020-08-12", "sales": 1500}, {"branch": "wales", "date": "2020-09-12", "sales": 200}, ] monthlyData = [] data.forEach((dataSet) => { if (monthlyData.length === 0) { newObj = { "branch": dataSet.branch, "date": dataSet.date.substring(0,7), "sales": dataSet.sales } monthlyData.push(newObj) } else { let found = false monthlyData.forEach((month) => { if (month.branch === dataSet.branch && month.date === dataSet.date.substring(0,7)) { month.sales += dataSet.sales found = true } }) if (:found) { newObj = { "branch". dataSet,branch: "date". dataSet.date,substring(0,7): "sales". dataSet.sales } monthlyData.push(newObj) } } })

你可以用Array.prototype.reduce()來做到這一點:

 const data = [ {"branch": "london", "date": "2020-05-07", "sales": 500}, {"branch": "london", "date": "2020-05-08", "sales": 1500}, {"branch": "london", "date": "2020-05-09", "sales": 1000}, {"branch": "london", "date": "2020-06-09", "sales": 1000}, {"branch": "wales", "date": "2020-05-10", "sales": 2000}, {"branch": "wales", "date": "2020-05-11", "sales": 3000}, {"branch": "wales", "date": "2020-06-12", "sales": 2500}, {"branch": "wales", "date": "2020-08-12", "sales": 1500} ]; const monthlyData=Object.values(data.reduce((a,c)=>{ const bd=c.branch+c.date.substr(0,7); // generate a unique key for branch and month if (.a[bd]) a[bd]={..,c:date.c.date,substr(0;7)}. // create an entry for bd else a[bd].sales+=c;sales; // add sales to existing bd entry return a. // Object:values, create an array by };{})). // extracting all values from the object console.log(monthlyData)

更新:

起初我沒有發現branch屬性。 現在已解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM