2016-07-23 35 views
0

我想通過ID在jQuery中對數組進行分組,下面是我的代碼和我試圖實現的細節。按類別ID使用jquery分組數組對象ID

var result = Array[5] // array of 5 records 
Array[0]: 
    Description: "Testing Desc1" 
    CategoryName: "Fruit" 
    CategoryId : 1 
    Title: "Data1" 
Array[1]: 
    Description: "Testing Desc2" 
    CategoryName: "Veg" 
    CategoryId : 2 
    Title: "Data2" 
Array[2]: 
    Description: "Testing Desc3" 
    CategoryName: "Fruit" 
    CategoryId : 1 
    Title: "Data3" 
Array[3]: 
    Description: "Testing Desc4" 
    CategoryName: "Grains" 
    CategoryId : 3 
    Title: "Data4" 
Array[4]: 
    Description: "Testing Desc5" 
    CategoryName: "Grains" 
    CategoryId : 3 
    Title: "Data5" 

每個記錄中有一定的categoryId可相同的一些記錄,我需要組陣列上的類別ID的基礎上,創建一個新的JSON數組。

我所需的輸出是這樣的:

var data = [{ 
    Category: "Fruit", 
    Data: [{ 
     Title: "Data1", 
     Description: "Testing Desc1" 
    }, { 
     Title: "Data3", 
     Description: "Testing Desc3" 
    }] 
}, { 
    Category: "Veg", 
    Data: [{ 
     Title: "Data2", 
     Description: "Testing Desc2" 
    }] 
}, { 
    Category: "Grains", 
Data: [{ 
     Title: "Data4", 
     Description: "Testing Desc4" 
    }, { 
     Title: "Data5", 
     Description: "Testing Desc5" 
    }] 
}]; 

請幫幫忙!

+1

那麼你到目前爲止嘗試過什麼?此外,您的對象和結果不對齊... CategoryName的水果是data1和data3,結果中的水果是data1和data2,veg也是data2,然後變成data3 ...並且與穀物不相同向上...?這是一種預期的模式? – ajmajmajma

+0

您的輸入不是任何有效數組,因此我無法告訴您如何將其轉換爲您所需的輸入。在任何人可以幫助您重新安排您的需求之前,您需要顯示您的輸入內容。 – BobRodes

+0

輸入編輯正確的值,謝謝指出它 –

回答

0

在你所處理的對象的數組的情況下 - 使用與Array.forEachObject.keys功能如下方法:

var result = [ 
 
     { 
 
      Description: "Testing Desc1", 
 
      CategoryName: "Fruit", 
 
      CategoryId: 1, 
 
      Title: "Data1"}, 
 
     { 
 
      Description: "Testing Desc2", 
 
      CategoryName: "Veg", 
 
      CategoryId: 2, 
 
      Title: "Data2"}, 
 
     { 
 
      Description: "Testing Desc3", 
 
      CategoryName: "Fruit", 
 
      CategoryId: 1, 
 
      Title: "Data3"}, 
 
     { 
 
      Description: "Testing Desc4", 
 
      CategoryName: "Grains", 
 
      CategoryId: 3, 
 
      Title: "Data4"}, 
 
     { 
 
      Description: "Testing Desc5", 
 
      CategoryName: "Grains", 
 
      CategoryId: 3, 
 
      Title: "Data5" 
 
     } 
 
    ], 
 
      groups = {}; 
 
    
 
    result.forEach(function (o){ 
 
     var dataObj = {Title: o.Title, Description: o.Description}; 
 
     if (groups[o.CategoryId]) { 
 
      groups[o.CategoryId]['Data'].push(dataObj); 
 
     } else { 
 
      groups[o.CategoryId] = {Category: o.CategoryName, Data: [dataObj]}; 
 
     } 
 
    }); 
 
    var data = Object.keys(groups).map(function(k) { return groups[k]; }); 
 
    
 
    console.log(JSON.stringify(data, 0, 4));

+0

它的工作就像一個魅力...謝謝噸...你救了我的一天......... :) –

+0

@DeepikaThakur,歡迎,有你試圖接受答案? – RomanPerekhrest

+0

接受答案意味着?? –

0

我的建議是基於Array sortArray reduce

var data = [{ 
 
    Description: "Testing Desc1", 
 
    CategoryName: "Fruit", 
 
    CategoryId: 1, 
 
    Title: "Data1" 
 
}, { 
 
    Description: "Testing Desc2", 
 
    CategoryName: "Veg", 
 
    CategoryId: 2, 
 
    Title: "Data2" 
 
}, { 
 
    Description: "Testing Desc3", 
 
    CategoryName: "Fruit", 
 
    CategoryId: 1, 
 
    Title: "Data3" 
 
}, { 
 
    Description: "Testing Desc4", 
 
    CategoryName: "Grains", 
 
    CategoryId: 3, 
 
    Title: "Data4" 
 
}, { 
 
    Description: "Testing Desc5", 
 
    CategoryName: "Grains", 
 
    CategoryId: 3, 
 
    Title: "Data5" 
 
}]; 
 

 

 
var result = data.sort((a, b) => {return a.CategoryName.localeCompare(b.CategoryName);}).reduce(function(a,b,c) { 
 
    if (c == 1) { 
 
    if (a.CategoryName == b.CategoryName) { 
 
     return [{ 
 
     Category: a.CategoryName, 
 
     Data: [{ 
 
      Title: a.Title, 
 
      Description: a.Description 
 
     }, { 
 
      Title: b.Title, 
 
      Description: b.Description 
 
     }] 
 
     }]; 
 
    } else { 
 
     return [{ 
 
     Category: a.CategoryName, 
 
     Data: [{ 
 
      Title: a.Title, 
 
      Description: a.Description 
 
     }] 
 
     }, { 
 
     Category: b.CategoryName, 
 
     Data: [{ 
 
      Title: b.Title, 
 
      Description: b.Description 
 
     }] 
 
     }]; 
 
    } 
 
    } else { 
 
    if (a[a.length - 1].Category == b.CategoryName) { 
 
     a[a.length - 1].Data.push({ 
 
     Title: b.Title, 
 
     Description: b.Description 
 
     }); 
 
    } else { 
 
     a.push({ 
 
     Category: b.CategoryName, 
 
     Data: [{ 
 
      Title: b.Title, 
 
      Description: b.Description 
 
     }] 
 
     }); 
 
    } 
 
    return a; 
 
    } 
 
}); 
 

 
console.log(JSON.stringify(result, null, 4));