2016-09-06 29 views
0

对于这样Javascript,合并两个物品,每个物品1400个,最快的方式?

var arr = []; 
arr[0] = {}; 
arr[0].p1 = []; 
arr[0].p1[0] = 'hola arr0 p1'; 
arr[0].p2 = []; 
arr[0].p2[0] = 'hola arr0 p2'; 
arr[1] = {}; 
arr[1].p1 = []; 
arr[1].p1[0] = 'hola arr1 p1'; 
arr[1].p2 = []; 
arr[1].p2[0] = 'hola arr1 p2'; 
arr[2] = {}; 
arr[2].p1 = []; 
arr[2].p1[0] = 'hola arr2 p1'; 
arr[2].p3 = []; 
arr[2].p3[0] = 'hola arr2 p3'; 
arr[3] = {}; 
arr[3].p2 = []; 
arr[3].p2[0] = 'hola arr3 p2'; 
arr[3].p3 = []; 
arr[3].p3[0] = 'hola arr3 p3'; 
arr[4] = {}; 
arr[4].p1 = []; 
arr[4].p1[0] = 'hola arr4 p1'; 
arr[4].p4 = []; 
arr[4].p4[0] = 'hola arr4 p4'; 

我想,这样在最后我有一个单一的对象凝结的所有信息合并对象的结构。 此代码的工作:

for (let a=1;a<arr.length; a++){ 
    for (let i in arr[0]) { 
     for (let j in arr[a]) { 
     if (i === j) { 
     arr[0][i][a] = arr[a][j][0]; 
     delete arr[a][j]; 
     } 
     } 
    } 

    for (let j in arr[a]) { 
     arr[0][j] = []; 
     arr[0][j][a] = arr[a][j][0]; 
    delete arr[a][j]; 
    } 

} 

console.log(arr) 

而且我得到我想要的输出。

https://jsfiddle.net/jb73tur4/

的问题是,在我的实际代码ARR [0]具有1500项和ARR [1]具有1300层的密钥。通过这两个循环意味着1500x1300次迭代,这会冻结浏览器。

有没有办法做到这一点?以某种方式加速这个?

回答

0

通过拍摄物体,而不是-的阵列特性的优势,这需要很多反复次数比较少

https://jsfiddle.net/jb73tur4/2/

for (var a = 1; a < arr.length; a++) { 
    for (let p in arr[a]) { 
    if (arr[0][p]) { 
     arr[0][p][a] = arr[a][p][0]; 
     delete arr[a][p]; 
    } 
    } 

    let new_str = {}; 
    for (let p in arr[a]) { 
    new_str[p] = []; 
    new_str[p][a] = arr[a][p][0]; 
    } 
    Object.assign(arr[0], new_str); 
    delete arr[a]; 
} 

console.log(arr)