无法使用JavaScript/Node.js映射两个数组

无法使用JavaScript/Node.js映射两个数组,javascript,arrays,Javascript,Arrays,我无法使用JavaScript按照键值映射两个json数据数组。我的代码如下: var userdata=[{'email':'a@gmail.com','name':'Rajj'},{'email':'b@gmail.com','name':'Rajesh'}]; var userdata1=[{'email':'a@gmail.com','address':'rasukgarh'}]; var finalArr=[]; userdata.ma

我无法使用JavaScript按照键值映射两个json数据数组。我的代码如下:

 var userdata=[{'email':'a@gmail.com','name':'Rajj'},{'email':'b@gmail.com','name':'Rajesh'}];
        var userdata1=[{'email':'a@gmail.com','address':'rasukgarh'}];
        var finalArr=[];
        userdata.map(item => {
              userdata1.map(item1 => {
                if(item.email==item1.email){
                  finalArr.push(Object.assign(item, item1));
                }else{
                  finalArr.push(Object.assign(item, item1));
                }
              })
            })
            console.log('all Data',finalArr);
      }
这里我的要求是,如果两个数组中存在相同的电子邮件id,则第二个数组的附加数据将与第一个数组合并。如果第一个数组有一些数据,并且基于
电子邮件值
第二个数组中没有数据,那么在这种情况下,只有第一个数组数据将推送到结果数组。这里是我的预期输出

finalArr=[{'email':'a@gmail.com','name':'Rajj','address':'rasukgarh'},{'email':'b@gmail.com','name':'Rajesh'}]
但在我的情况下,我不能这样做。

您可以使用
map()
创建新数组,使用
find()
在第二个数组中查找具有相同电子邮件的对象,使用
Object.assign()
创建对象的副本,并从第二个数组中分配对象

var userdata=[{'email':'a@gmail.com','name':'Rajj'},{'email':'b@gmail.com','name':'Rajesh'}];
var userdata1=[{'email':'a@gmail.com','address':'rasukgarh'}]
var result=userdata.map(函数(e){
var find=userdata1.find(a=>a.email==e.email);
返回Object.assign({},e,find)
})
console.log(结果)
您可以使用
map()
创建新数组,使用
find()
在第二个数组中查找具有相同电子邮件的对象,使用
Object.assign()
创建对象副本并从第二个数组中分配对象

var userdata=[{'email':'a@gmail.com','name':'Rajj'},{'email':'b@gmail.com','name':'Rajesh'}];
var userdata1=[{'email':'a@gmail.com','address':'rasukgarh'}]
var result=userdata.map(函数(e){
var find=userdata1.find(a=>a.email==e.email);
返回Object.assign({},e,find)
})
console.log(结果)
var userdata=[{'email':'a@gmail.com','name':'Rajj'},{'email':'b@gmail.com','name':'Rajesh'}];
var userdata1=[{'email':'a@gmail.com“,”地址“:”rasukgarh“}];
userdata.map(函数(项){
userdata1.map(函数(item1){
如果(item.email==item1.email){
//修改原始userdata数组项
对象。分配(项,项1);
}
})
})
console.log(userdata)
var userdata=[{'email':'a@gmail.com','name':'Rajj'},{'email':'b@gmail.com','name':'Rajesh'}];
var userdata1=[{'email':'a@gmail.com“,”地址“:”rasukgarh“}];
userdata.map(函数(项){
userdata1.map(函数(item1){
如果(item.email==item1.email){
//修改原始userdata数组项
对象。分配(项,项1);
}
})
})

console.log(userdata)同时删除'else{finalArr.push(Object.assign(item,item1));};'然后只有匹配的值出现。哦,我明白你的意思了。我需要的是,如果两个数组的电子邮件都匹配,那么两个数组的数据都将合并,否则数据将被合并到一个数组中,该数组将推送到finalArr。同时删除'else{finalArr.push(Object.assign(item,item1));};'然后只有匹配的值才会出现。哦,我明白你的意思了。我需要的是,如果两个数组的电子邮件都匹配,那么两个数组的数据都将合并,否则,数据将在一个数组中,并推送到finalArr。