compare two array form an array based on name with percentage and days. I have done with map function but some much duplicates. Pls provide a better solution.
const a = [{cname: 'a'},{cname: 'b'},{cname: 'c'},{cname: 'd'},{cname: 'e'},{cname: 'f'},{cname: 'g'},{cname: 'h'},{cname: 'i'},{cname: 'j'},{cname: 'k'},{cname: 'l'},{cname: 'm'}]
const b = [{name: 'a', percentage: 10, days: 20, template: 'abc', id: '1'}, {name: 'e', percentage: 11, days: 21, template: 'cde', id: '2'}, {name: 'm', percentage: 12, days: 22, template: 'ghi', id: '3'}]
result = [{name: 'a', percentage: 10, days: 20, template: 'abc', id: '1'},{name: 'b', percentage: 0, days: 0, template: '', id: ''},{name: 'c', percentage: 0, days: 0, template: '', id: ''},{name: 'd', percentage: 0, days: 0, template: '', id: ''}, {name: 'e', percentage: 11, days: 21, template: 'cde', id: '2'},{name: 'f', percentage: 0, days: 0, template: '', id: ''},{name: 'g', percentage: 0, days: 0, template: '', id: ''},{name: 'h', percentage: 0, days: 0, template: '', id: ''},{name: 'i', percentage: 0, days: 0, template: '', id: ''},{name: 'j', percentage: 0, days: 0, template: '', id: ''},{name: 'k', percentage: 0, days: 0, template: '', id: ''},{name: 'l', percentage: 0, days: 0, template: '', id: ''}, {name: 'm', percentage: 12, days: 22, template: 'ghi', id: '3'}],
const result = [];
a.filter(el => {
b.filter(elm => {
if (el.cname === elm.name) {
result.push(elm);
} else {
result.push({
percentage: 0,
name: el.cname,
days: 0,
template: '',
id: ''
})
}
})
})
console.log(result)