2016-11-11 97 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,不字符串化的对象。

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 –