2016-07-23 3 views
0

ich zu einer Gruppe versuchen mein Array von Id in jQuery, sind hier die Details meines Codes und was ich zu erreichen versuchen.Gruppe Array-Objekt nach Kategorie-ID mit Jquery

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" 

Jeder Datensatz einige categoryId darin hat, die für einen Teil der Datensätze gleich sein kann, muß ich Gruppen Array auf Basis der Kategorie-ID und einen neuen Json-Array.

Meine Required Ausgabe ist wie folgt:

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" 
    }] 
}]; 

Bitte um Hilfe!

+1

Also, was haben Sie versucht, so weit? Auch Ihr Objekt und Ergebnis nicht line up ... 'CategoryName' Frucht ist data1 und data3, und im Ergebnis Frucht ist data1 und Daten2, auch veg ist Daten2 und dann verwandelt sich in data3 ... und gleicht mit Körnern nicht auskleiden oben...? Ist das ein beabsichtigtes Muster? – ajmajmajma

+0

Ihre Eingabe ist kein gültiges Array, daher kann ich Ihnen nicht sagen, wie Sie es in Ihre benötigte Eingabe umwandeln können. Sie müssen zeigen, was Ihre Eingabe ist, bevor jemand Ihnen helfen kann, es in das zu verwandeln, was Sie brauchen. – BobRodes

+0

Eingabe der korrekten Werte bearbeitet, dank es für den Hinweis –

Antwort

0

Wenn Sie mit einer Reihe von Objekten zu tun - mit Array.forEach und Object.keys Funktionen die folgende Methode verwenden:

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

heraus, dass es wie ein Charme ... Dank einer Tonne ... Sie meinen Tag gerettet ......... :) –

+0

@DeepikaThakur, willkommen, haben Sie versuchte die Antwort zu akzeptieren? – RomanPerekhrest

+0

accept antwort bedeutet ?? –

0

Mein Vorschlag auf Array sort und Array reduce basiert:

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));