2016-11-11 3 views
-1

У меня проблема, с которой, похоже, почти нет подсказки, чтобы получить ответ.Javascript: группировка массива объектов по id

Я не знаю, что я делаю неправильно.

Код:

function groupBy(arr, cb) { 
 
    var groups = {}; 
 
    arr.forEach(function(o) { 
 
    var group = JSON.stringify(cb(o)); 
 
    groups[group] = groups[group] || []; 
 
    groups[group].push(o); 
 
    }); 
 
    return Object.keys(groups).map(function(group) { 
 
    return groups[group]; 
 
    }); 
 

 
    var result = groupBy(arr, function(i) { 
 
    return currentObject.branch.id; 
 
    }) 
 
} 
 

 
var list = [{ 
 
    id: "102", 
 
    name: "Alice" 
 
}, { 
 
    id: "205", 
 
    name: "Bob", 
 
    title: "Dr." 
 
}, { 
 
    id: "592", 
 
    name: "Clyde", 
 
    age: 32 
 
}]; 
 

 
console.log(groupBy(list, function(i) { 
 
    return i.id; 
 
}));

Что он должен вернуть:

{ 
"102": [{id: "102", name: "Alice"}], 
"205": [{id: "205", name: "Bob", title: "Dr."}], 
"592": [{id: "592", name: "Clyde", age: 32}] 
} 
+0

Вы получаете какие-либо ошибки в консоли? Если да, то каковы они и по каким направлениям? – Amy

+0

Вы понимаете, что пытаетесь вызвать 'groupBy' * внутри *' GroupBy'? –

+0

Почему вы рекурсивно называете 'groupBy'? – Timo

ответ

3

Вам нужно просто вернуться groups без stringify объекта прежде.

function groupBy(array, cb) { 
 
    var groups = Object.create(null); 
 
    array.forEach(function (o) { 
 
     var key = cb(o); 
 
     groups[key] = groups[key] || []; 
 
     groups[key].push(o); 
 
    }); 
 
    return groups; 
 
} 
 

 

 
var list = [{ id: "102", name: "Alice" }, { id: "205", name: "Bob", title: "Dr." }, { id: "592", name: "Clyde", age: 32 }]; 
 

 
console.log(groupBy(list, function (i) { return i.id; }));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Что такое '' .as-console-wrapper {max-height: 100%! Important; top: 0; } '** используется? –

+5

он распространяет консоль на 100% высоты, чтобы узнать больше о результате. –

+1

О, это умная Нина, впрыскивающая CSS для консоли отпечатка. Хлопок для вас! +1 –

Смежные вопросы