Javascript 比较2个数组并基于两个数组的值形成一个新数组?

Javascript 比较2个数组并基于两个数组的值形成一个新数组?,javascript,Javascript,比较两个数组,根据名称和百分比和天数组成一个数组。我已经完成了映射函数,但是有很多重复项。请提供更好的解决方案 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 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)

首先将
a
数组分组到按ID索引的对象(或映射)中,其中对象的值是模板(带有
百分比:0
等)和
名称
属性。然后遍历另一个数组,如果有匹配的名称,则合并到关联的对象上:

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'}]
常量b=[{name:'a',百分比:10,天:20,模板:'abc',id:'1'},{name:'e',百分比:11,天:21,模板:'cde',id:'2'},{name:'m',百分比:12,天:22,模板:'ghi',id:'3'}]
常量模板={百分比:0,天数:0,模板:“”,id:“”};
const group=Object.fromEntries(a.map(item=>[item.cname,{name:item.cname,…template}]);
用于(b的施工项目){
if(分组[项目名称]){
分配(分组的[项目名称],项目);
}
}

console.log(Object.values(grouped))你好,毗瑟奴,请让我明白这一点,你有一个解决方案,但重复的值被添加到数组中。我说的对吗?是的。。。。。。。。。。。。