写一个函数“groupBy(array,callback)” [英] Write a function "groupBy(array, callback)"
问题描述
我有一个JavaScript任务,我必须实现函数groupBy,当给定一个对象数组和一个函数时,
返回一个对象,其中输入对象通过在每个输入上调用fn的结果来键入。
I have a JavaScript task where I have to implement a function "groupBy", which, when given an array of objects and a function, returns an object where the input objects are keyed by the result of calling the fn on each of them.
基本上,我必须编写一个函数,groupBy(array,callback) ),返回返回以下内容的对象。
Essentially, I have to write a function, "groupBy(array, callback)", returns an object where the following is returned.
例如:
var list = [{id: "102", name: "Alice"},
{id: "205", name: "Bob", title: "Dr."},
{id: "592", name: "Clyde", age: 32}];
groupBy(list, function(i) { return i.id; });
Returns:
{
"102": [{id: "102", name: "Alice"}],
"205": [{id: "205", name: "Bob", title: "Dr."}],
"592": [{id: "592", name: "Clyde", age: 32}]
}
Example 2:
groupBy(list, function(i) { return i.name.length; });
Returns:
{
"3": [{id: "205", name: "Bob", title: "Dr."}],
"5": [{id: "102", name: "Alice"},
{id: "592", name: "Clyde", age: 32}]
}
我对回调函数还很陌生,想要一些提示/建议就可以开始了。即使是很好的教程链接也会非常感激。
I'm still quite new to callback functions, and would like some tips/advice to simply get started. Even links to good tutorials would be greatly appreciated.
非常感谢!
推荐答案
使用纯JS的解决方案:
Solution with pure JS:
var list = [{
id: "102",
name: "Alice"
},
{
id: "205",
name: "Bob",
title: "Dr."
},
{
id: "592",
name: "Clyde",
age: 32
}
];
function groupBy(array, callback) {
return array.reduce(function(store, item) {
var key = callback(item);
var value = store[key] || [];
store[key] = value.concat([item]);
return store;
}, {})
}
console.log('example 1: ', groupBy(list, function(i) { return i.id; }));
console.log('example 2: ', groupBy(list, function(i) { return i.name.length; }));
这篇关于写一个函数“groupBy(array,callback)”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!