2016-09-06 51 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)