How does js add up the amountMoney in the salary array where postDate is the same month to return a new array?
{
"salary": [
{
"postDate": "2017-09-29 00:00:00",
"amountMoney": "495.0"
},
{
"postDate": "2017-09-13 00:00:00",
"amountMoney": "495.0"
},
{
"postDate": "2017-09-04 00:00:00",
"amountMoney": "2526.06"
},
{
"postDate": "2017-08-08 00:00:00",
"amountMoney": "495.0"
},
{
"postDate": "2017-08-08 00:00:00",
"amountMoney": "2526.06"
},
{
"postDate": "2017-07-24 00:00:00",
"amountMoney": "495.0"
},
{
"postDate": "2017-07-19 00:00:00",
"amountMoney": "2526.06"
},
{
"postDate": "2017-06-16 00:00:00",
"amountMoney": "2772.06"
}
]
}
array.map ()
mainly because I don't know how to add amountMoney with the same number of months, that is, the content of map ().
var salary = [
{
"postDate": "2017-09-29 00:00:00",
"amountMoney": "495.0"
},
{
"postDate": "2017-09-13 00:00:00",
"amountMoney": "495.0"
},
{
"postDate": "2017-09-04 00:00:00",
"amountMoney": "2526.06"
},
{
"postDate": "2017-08-08 00:00:00",
"amountMoney": "495.0"
},
{
"postDate": "2017-08-08 00:00:00",
"amountMoney": "2526.06"
},
{
"postDate": "2017-07-24 00:00:00",
"amountMoney": "495.0"
},
{
"postDate": "2017-07-19 00:00:00",
"amountMoney": "2526.06"
},
{
"postDate": "2017-06-16 00:00:00",
"amountMoney": "2772.06"
}
];
var rs = [];
var json = {};
for (let i = 0, len = salary.length; i < len; iPP) {
var month = salary[i].postDate.split('-')[1];
if (json[month] !== 1) {
rs.push ({
month: month,
amountMoney: Number(salary[i].amountMoney)
})
json[month] = 1;
} else {
for (let j = 0, l = rs.length; j < l; jPP) {
if (rs[j].month == month) {
rs[j].amountMoney += Number(salary[i].amountMoney)
}
}
}
}
console.log(rs);
function group (data) {
let cache = {}
data.forEach(item => {
let month = new Date(item.postDate).getMonth() + 1 + ''
if (month.length === 1) month = '0' + month
if (cache[month]) {
cache[month] += +item.amountMoney
} else {
cache[month] = +item.amountMoney
}
})
let result = []
for (let key in cache) {
result.push({postDate: key, amountMoney: '' + cache[key]})
}
return result
}
group([{
"postDate": "2017-09-29 00:00:00",
"amountMoney": "495.0"
}, {
"postDate": "2017-09-13 00:00:00",
"amountMoney": "495.0"
}, {
"postDate": "2017-09-04 00:00:00",
"amountMoney": "2526.06"
}, {
"postDate": "2017-08-08 00:00:00",
"amountMoney": "495.0"
}, {
"postDate": "2017-08-08 00:00:00",
"amountMoney": "2526.06"
}, {
"postDate": "2017-07-24 00:00:00",
"amountMoney": "495.0"
}, {
"postDate": "2017-07-19 00:00:00",
"amountMoney": "2526.06"
}, {
"postDate": "2017-06-16 00:00:00",
"amountMoney": "2772.06"
}])
I don't know if it meets your needs. Because it is merged by month, the returned postDate shows the month. The result is as follows:
convert the postDate parameter to a timestamp for equal matching and return a new array