Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按值合并Javascript中的两个多维数组_Javascript_Arrays_Multidimensional Array - Fatal编程技术网

按值合并Javascript中的两个多维数组

按值合并Javascript中的两个多维数组,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有两个阵列: var array1 = [['email1', object1],['email2', object2],['email3', object3],['email4',object4]] var array2 = [['email1',[['a1','b1']]],['email3',[['a3','b3']]], ['email4',[['a4','b4'],['a4a','b4a']]] 我需要通过电子邮件将它们合并,以便生成的数组看起来像,没有重复的电子邮件: var m

我有两个阵列:

var array1 = [['email1', object1],['email2', object2],['email3', object3],['email4',object4]]
var array2 = [['email1',[['a1','b1']]],['email3',[['a3','b3']]], ['email4',[['a4','b4'],['a4a','b4a']]]
我需要通过电子邮件将它们合并,以便生成的数组看起来像,没有重复的电子邮件:

var mergedarray = 
[['email1', object1, [['a1', 'b1']]],['email2', object2],['email3', object3, ['a3', 'b3']],['email4',object4,[['a4','b4'],['a4a','b4a']]]]
看着这些多维空间,我的大脑很痛。有什么建议吗?

创建一个数组2,以便在第一个数组上更快地搜索和使用,反之亦然

   const hash = new Map();

   for(const [email, ...rest] of [...array1, ...array2]) {
     if(hash.has(email)) {
       hash.get(email).push(...rest);
     } else {
        hash.set(email, [email, ...rest]);
    }
  }

  const result = [...hash.values()];
var array1=[['email1','object1'],['email2','object2'],['email3','object3'],['email4','object4']
变量array2=['email1'、['a1'、['b1']]、['email3'、['a3'、['b3']]、['email4'、['a4'、['b4']、['a4a'、'b4a']]
设map2=新的Map(array2);
放出来=数组1.map(([key,val])=>[key,val,map2.get(key)| |[]);

console.log(out)
您可以映射第二个数组,检查第一个元素是否在第一个数组中的任何数组中,如果返回true,则推送第二个元素:
var array1=[['email1','object1'],['email2','object2'],['email3','object3'],['email4','object4']
变量array2=['email1'、['a1'、'b1']]、['email3'、['a3'、'b3']]、['email4'、['a4'、'b4']、['a4a'、'b4a']]
array2.forEach((arr2,i2)=>{
数组1.map((arr1,i1)=>{
if(arr1[0]==arr2[0]){
阵列1[i1]。推送(阵列2[i2][1])
}
})
})

console.log(array1)
无法实现任何建议(可能是因为我的技能低下),我最终将数组转换为对象来分配键值对,因此新数据如下所示:

var array1 = [{email:'email1', obj:object1, data:[]},{email:'email2', obj:object2, data:[]},{email:'email3', obj:object3, data:[]},{email:'email4',obj:object4, data:[]}];
var array2 = [{email:'email1',data:[{'a1','b1'}]},{email:'email3',data:[{'a3','b3'}]}, {email:'email4',data:[{'a4','b4'}]},{email:'email4',data:[{'a4a','b4a'}]}];
之后,我使用循环将对象数据从一个数组推送到另一个数组:

 for (var x in array1) {
    var res = array1[x].email;

    for (var z in array2) {
      var cod = array2[z].email;
      var q = 0;
      if (res == cod) {
        array1[x].data.push(array2[z].data[0]);
        q++;
      }

    }
  }
结果是:

var array1 = [{email:'email1',obj:object1,data:[{'a1','b1'}]},{email:'email2',obj:object2,data:[]},{email:'email3',data:[{'a3','b3'}]},{email:'email4',obj:object4,data:[{'a4','b4'},{'a4a','b4a'}]}];

它们不应该是字符串吗…?结果中第二个位置的
[]
从何而来?这是一种糟糕的数据存储方式。如果它们变得无序……如果电子邮件号码被破坏……这将如何工作?@JackBashford它们已经无序,您可以看到array2缺少“email2”。我需要通过电子邮件字符串值合并它们