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

时间:2017-08-26 09:48:40

标签: 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.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,则第二个数组的附加数据将与第一个数据合并。如果第一个数组有一些数据并且基于email value第二个数组中没有数据,则在帽子情况下只有第一个数组数据将推送到结果数组。这是我的预期输出。

finalArr=[{'email':'a@gmail.com','name':'Rajj','address':'rasukgarh'},{'email':'b@gmail.com','name':'Rajesh'}]

但在我的情况下,我不能这样。

2 个答案:

答案 0 :(得分:2)

您可以使用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(function(e) {
  var find = userdata1.find(a => a.email == e.email);
  return Object.assign({}, e, find)
})

console.log(result)




答案 1 :(得分:0)

<object width="400" height="400" data="SOMETHING.jar"></object>