let records = {"2018":{"Jan":{"records":[{"id":123,"date":"01-Jan-2018","amount":300,"type":"expense"}],"totalExpenses":300,"totalIncome":0},"Feb":{"records":[{"id":234,"date":"01-Jan-2019","description":"Syabas","amount":100,"type":"income"}],"totalExpenses":0,"totalIncome":100}},"2019":{"Jan":{"records":[{"id":789,"date":"01-Jan-2019","description":"McD","amount":150,"type":"expense"}],"totalExpenses":150,"totalIncome":0}}}
let month = 'Jan';
function update(year, month, obj, target) {
[year, month].reduce(function(r, e, i, a) {
if(!a[i + 1] && r[e]) {
r[e].records.push(obj);
r[e].totalExpenses += obj.amount
}
return r[e] = (r[e] || (a[i + 1] ? {} : {
records: [obj],
totalExpenses: obj.amount,
totalIncome: 0
}))
}, target)
}
update(2018, month, {id: 4, amount: 9999}, records);
update(2020, month, {id: 5, amount: 9999}, records);
console.log(records)