2016-11-11 15 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;トップ:0; } '**のために使用? –

+5

それは100%の高さにコンソールを広げ、より多くの結果を読む。 –

+1

ああ、賢いニーナ、スニペットコンソール用のCSSを注入している。あなたのために拍手! +1 –

関連する問題