2015-09-05 57 views
-4

任何人都可以幫我用JavaScript函數來推翻這個下面的數組。這個結果我從數據庫中獲得,並打算使用JavaScript來做一些樹。如何推翻從兒童父母的數組結果樹到父母的孩子在Javascript中

[{ 
    SubCategoryId: 1, 
    SubCategoryName: "SubCategoryName1", 
    Category: { 
     CategoryId: 11, 
     CategoryName: "CategoryName1", 
     MainCategory: { 
      MainCategoryId: 111, 
      MainCategoryName: "MainCategoryName1", 
     } 
    } 
},{ 
    SubCategoryId: 2, 
    SubCategoryName: "SubCategoryName2", 
    Category: { 
     CategoryId: 11, 
     CategoryName: "CategoryName1", 
     MainCategory: { 
      MainCategoryId: 111, 
      MainCategoryName: "MainCategoryName1", 
     } 
    } 
},{ 
    SubCategoryId: 3, 
    SubCategoryName: "SubCategoryName3", 
    Category: { 
     CategoryId: 22, 
     CategoryName: "CategoryName2", 
     MainCategory: { 
      MainCategoryId: 111, 
      MainCategoryName: "MainCategoryName1", 
     } 
    } 
}] 

我預期的結果是:

[{ 
    MainCategoryId: 111, 
    MainCategoryName: "MainCategoryName1", 
    Category: [{ 
     CategoryId: 11, 
     CategoryName: "CategoryName1", 
     SubCategory: [{ 
      SubCategoryId: 1, 
      SubCategoryName: "SubCategoryName1", 
     }, { 
      SubCategoryId: 2, 
      SubCategoryName: "SubCategoryName2", 
     }] 
    }, { 
     CategoryId: 22, 
     CategoryName: "CategoryName2", 
     SubCategory: [{ 
      SubCategoryId: 3, 
      SubCategoryName: "SubCategoryName3", 
     }] 
    }], 
}] 

感謝您的幫助

+5

有什麼問題嗎? – m02ph3u5

+0

結構來自孩子父母,我需要將其改爲父母子女 –

回答

0
function category (arr) { 

    // Start with empty array 
    ret = new Array(); 

    // Iterate arr 
    for (var i = 0; i < arr.length; i++) { 

     // Search MainCategory 
     var match = false; 
     var j = 0; 
     for (j = 0; j < ret.length; j++) { 
      if (ret[j].MainCategoryId == arr[i].Category.MainCategory.MainCategoryId) { match = true; break; } 
     } 

     // If not exist MainCategory 
     if (!match) { 
      ret.push({ 
       MainCategoryId: arr[i].Category.MainCategory.MainCategoryId, 
       MainCategoryName: arr[i].Category.MainCategory.MainCategoryName, 
       Category: [] 
      }); 
     } 

     // Search Category 
     match = false; 
     var k = 0; 
     for (k = 0; k < ret[j].Category.length; k++) { 
      if (ret[j].Category[k].CategoryId == arr[i].Category.CategoryId) { match = true; break; } 
     } 

     // If not exist Category 
     if (!match) { 
      ret[j].Category.push({ 
       CategoryId: arr[i].Category.CategoryId, 
       CategoryName: arr[i].Category.CategoryName, 
       SubCategory: [] 
      }); 
     } 

     // Insert Subcategory 
     ret[j].Category[k].SubCategory.push({ 
      SubCategoryId: arr[i].SubCategoryId, 
      SubCategoryName: arr[i].SubCategoryName 
     }); 

    } 

    // Return new array 
    return ret; 
} 
+0

這真是太棒了!並且工作得很好,非常感謝,非常感謝。 –