Tu jest nieco inna, ale bardziej ogólny wersja @ odpowiedź Iana
Zastrzeżenie: wynik jest nieco inny od wymogu PO, ale inni, jak ja, którzy potykają się na to pytanie może korzystać z bardziej rodzajowy oDPOWIEDŹ IMHO
var origArr = [
{food: 'apple', type: 'fruit'},
{food: 'potato', type: 'vegetable'},
{food: 'banana', type: 'fruit'}
];
function groupBy(arr, key) {
var newArr = [],
types = {},
newItem, i, j, cur;
for (i = 0, j = arr.length; i < j; i++) {
cur = arr[i];
if (!(cur[key] in types)) {
types[cur[key]] = { type: cur[key], data: [] };
newArr.push(types[cur[key]]);
}
types[cur[key]].data.push(cur);
}
return newArr;
}
console.log(groupBy(origArr, 'type'));
można znaleźć jsfiddle here
@Harley Najlepiej pokazać to, czego próbowaliśmy . Zwięzłe nie jest tak ważne, jak pokazanie wysiłku. Nie jest to również zwykła prośba - zobaczenie, gdzie jesteś, daje nam lepsze ujęcie w tworzeniu czegoś dokładnie na wymaganym poziomie. – ErikE
OK, przepraszam za to. –
@ErikE Alternatywnie, jest to ładne i proste pytanie, które ma wysoką łatwość zapisu, bez takich bzdur, jak nieudane i zawiłe próby rozwiązania. To jest pytanie, które uzyska najwięcej głosów uprzywilejowanych, ponieważ generyczny i odpowiedź będą również korzystne, ostatecznie przynosząc korzyść wszystkim. –