gpt4 book ai didi

javascript - 写一个函数 "groupBy(array, callback)"

转载 作者:搜寻专家 更新时间:2023-11-01 05:28:06 25 4
gpt4 key购买 nike

我有一个 JavaScript 任务,我必须在其中实现一个函数“groupBy”,当给定一个对象数组和一个函数时,返回一个对象,其中输入对象由对每个输入对象调用 fn 的结果键控。

基本上,我必须编写一个函数“groupBy(array, callback)”,返回一个对象,其中返回以下内容。

例如:

  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}]
}

我对回调函数还是很陌生,希望得到一些提示/建议来简单地入门。甚至非常感谢优秀教程的链接。

最佳答案

这是一个reduce() 单行代码。 Reduce 允许您遍历数组并根据其回调逻辑附加到新对象。在此函数中,a(表示累积)是我们正在制作的对象,c(表示当前项目)是循环中的每个项目,一次取一个。

它在这里工作特别简洁,因为传入了制作对象键的函数:

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

function groupBy(list, Fn) {
return list.reduce((a, c) => (a[Fn(c)] ? a[Fn(c)].push(c) : a[Fn(c)] = [c], a), {})
}

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

var l = groupBy(list, function(i) { return i.name.length; });
console.log(l)

关于javascript - 写一个函数 "groupBy(array, callback)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47245774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com