无法使用JavaScript/Node.js映射两个数组
我无法使用JavaScript按照键值映射两个json数据数组。我的代码如下:无法使用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
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。