Javascript 比较和更改两个对象数组

Javascript 比较和更改两个对象数组,javascript,arrays,object,ecmascript-6,Javascript,Arrays,Object,Ecmascript 6,我想比较两个数组中的每个对象。如果array1的属性名称与array2的属性名称匹配,则将array2的值从array1更改为array2 let array1 = [{ name: 'test1', values: ['a', 'b', 'c'] }, { name: 'test2', values: ['w,','q','q' ] } ] let array2 = [{ name: '

我想比较两个数组中的每个对象。如果array1的属性名称与array2的属性名称匹配,则将array2的值从array1更改为array2

let array1 = [{
        name: 'test1',
        values: ['a', 'b', 'c']
    },
    {
        name: 'test2',
         values: ['w,','q','q' ]
    }
]

let array2 = [{
        name: 'test1',
        items: '...',
        settings: '...',
        values: []
    },
    {
        name: 'test9',
        items: '...',
        settings: '...',
        values: []
    },

    {
        name: 'test10',
        items: '...',
        settings: '...',
        values: []
    },

    {
        name: 'test2',
        items: 'test2',
        settings: '...',
        values: []
    },
]
预期从array2返回一个新数组集-

let array2New = [{
            name: 'test1',
            items: '...',
            settings: '...',
            values: ['a', 'b', 'c']
        },
        {
            name: 'test9',
            items: '...',
            settings: '...',
            values: []
        },

        {
            name: 'test10',
            items: '...',
            settings: '...',
            values: []
        },

        {
            name: 'test2',
            items: 'test2',
            settings: '...',
            values: ['w,','q','q' ]
        }
    },
]
我试着将嵌套贴图放在贴图中。越来越乱。
提前感谢:)

使用
map
find

let array1=[{name:'test1',value:['a','b','c']},{name:'test2',value:['w','q','q']}];
让array2=[{name:'test1',items:''.'设置:'.'.'.',值:[]},{name:'test9',items:'.''.''.',设置:'.'.'.'.'.'.''.'.'.'.'.'.'.'.'.'.'.''.''.'.''.''.'.''.'.'.'.''''.'.'''.''.'.'.'''.''.''''.'''.'';
常量res=array2.map(e=>{
让found=array1.find(({name})=>name==e.name);
如果(发现)e.values=found.values;
返回e;
});
控制台日志(res)

。作为控制台包装{max height:100%!important;top:auto;}
您可以使用
reduce
来解决此问题

让数组1=[{
名称:“test1”,
值:['a','b','c']
},
{
名称:“test2”,
值:['w','q','q']
}
]
设array2=[{
名称:“test1”,
项目:“…”,
设置:“…”,
值:[]
},
{
名称:“test9”,
项目:“…”,
设置:“…”,
值:[]
},
{
名称:“test10”,
项目:“…”,
设置:“…”,
值:[]
},
{
名称:“test2”,
项目:“test2”,
设置:“…”,
值:[]
},
]
const newArray2=array2.reduce((newArray,currentObj)=>{
array1.forEach(baseObj=>{
if((baseObj.name==currentObj.name)&&baseObj.values){
currentObj.values=基本Obj.values;
}
})
newArray.push(currentObj);
返回新数组;
}, [])
console.log(newArray2)您可以选择一个并将找到的对象作为结果分配给最终对象

var array1=[{name:'test1',值:['a','b','c']},{name:'test2',值:['w','q','q']},
array2=[{name:'test1',items:'…',settings:'…',value:[]},{name:'test9',items:'…',settings:'test10',items:'…',settings:'…',value:[]},{name:'test2',items:'test2',settings:'…',value:[]},
map=newmap(array1.map(o=>[o.name,o]),
result=array2.map(o=>Object.assign({},o,map.get(o.name));
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
您还可以使用
过滤器
并获得如下结果:

let array1=[{name:'test1',value:['a','b','c']},{name:'test2',value:['w','q','q']}];
让array2=[{name:'test1',items:''.'设置:'.'.'.',值:[]},{name:'test9',items:'.''.''.',设置:'.'.'.'.'.'.''.'.'.'.'.'.'.'.'.'.'.''.''.'.''.''.'.''.'.'.'.''''.'.'''.''.'.'.'''.''.''''.'''.'';
var array2new=array2.filter(函数(obj2){
返回阵列1.过滤器(功能(obj1){
if(obj1.name==obj2.name){
返回obj2.values.push(obj1.values);
}else{return obj2;}
});
});

console.log(array2new)
我还建议您使用以下方法:

让数组1=[{
名称:“test1”,
值:['a','b','c']
},
{
名称:“test2”,
值:['w','q','q']
}
]
设array2=[{
名称:“test1”,
项目:“…”,
设置:“…”,
值:[]
},
{
名称:“test9”,
项目:“…”,
设置:“…”,
值:[]
},
{
名称:“test10”,
项目:“…”,
设置:“…”,
值:[]
},
{
名称:“test2”,
项目:“test2”,
设置:“…”,
值:[]
},
]
设arr=[…array2,…array1]。reduce((a,c)=>{
让filtered=a.filter(el=>el.name==c.name);
如果(过滤的长度){
Object.assign(过滤[0],c);
}否则{
a、 推(c);
}
返回a;
}, []);

log(JSON.stringify(arr))谢谢您的解决方案。直截了当。