You can use reduce()
and filter()
to return object as result.
var allreasonsids = [
{reasonid: 1, reasonname: 'abc'},
{reasonid: 2, reasonname: 'def'},
{reasonid: 3, reasonname: 'ghi'},
{reasonid: 4, reasonname: 'jkl'}
];
var reasonsandcount=[
{reasonid: 1, quantity: 5},
{reasonid: 2, quantity: 10},
{reasonid: 1, quantity: 3},
{reasonid: 3, quantity: 4},
{reasonid: 1, quantity: 2},
{reasonid: 2, quantity: 6}
];
var result = allreasonsids.reduce(function(r, e) {
var quant = reasonsandcount.filter(function(a) {
return e.reasonid == a.reasonid
}).reduce(function(re, el) {
return re + el.quantity
}, 0)
r[e.reasonname] = quant;
return r
}, {})
console.log(result)
You can also just use reduce()
and forEach()
loop.
var allreasonsids = [
{reasonid: 1, reasonname: 'abc'},
{reasonid: 2, reasonname: 'def'},
{reasonid: 3, reasonname: 'ghi'},
{reasonid: 4, reasonname: 'jkl'}
];
var reasonsandcount=[
{reasonid: 1, quantity: 5},
{reasonid: 2, quantity: 10},
{reasonid: 1, quantity: 3},
{reasonid: 3, quantity: 4},
{reasonid: 1, quantity: 2},
{reasonid: 2, quantity: 6}
];
var result = allreasonsids.reduce(function(r, e) {
var quant = 0;
reasonsandcount.forEach(el => el.reasonid == e.reasonid ? quant+=el.quantity : 0);
r[e.reasonname] = quant;
return r
}, {})
console.log(result)