如何推翻从儿童父母的数组结果树到父母的孩子在Javascript中

问题描述:

任何人都可以帮我用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

结构来自孩子父母,我需要将其改为父母子女 –

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

这真是太棒了!并且工作得很好,非常感谢,非常感谢。 –