gpt4 book ai didi

Javascript groupBy 实现只产生 1 个组

转载 作者:行者123 更新时间:2023-12-04 13:27:28 24 4
gpt4 key购买 nike

我正在尝试实现我自己的 groupBy 方法,并且我看到的一切都表明这应该可以工作,但是当我将它与数组一起使用时,我只能得到 1 个组,即使分组很好。我错过了什么:

const merge = (array) => array.reduce((a, b) => Object.keys(a).map(key => {
return {
[key]: a[key].concat(b[key] || [])
};
}).reduce(((a,b) => Object.assign({},a,b))))

Array.prototype.groupBy = function (grouper) {
const groups = this.map(e => {
return {
[grouper(e)]: [e]
};
})
console.log("Groups:\n",JSON.stringify(groups))

return merge(groups)
}
const one = {
1: [1,2,3],
0: [4,5,6]
}
const two = {
1: [7,8,9],
0: [10,11,12]
}
const three = {
1: [13],
0: [16]
}


const array1 = merge([one,two,three])
console.log("case1:\n",JSON.stringify(array1,null,4))

const array2 = [1,2,3,4,5,6,7,9,10].groupBy(e => e % 2)
console.log("case2:\n",JSON.stringify(array2,null,4))

下面的输出,预期是“case1”:
case1:
{
"0": [
4,
5,
6,
10,
11,
12,
16
],
"1": [
1,
2,
3,
7,
8,
9,
13
]
}

Groups:
[{"1":[1]},{"0":[2]},{"1":[3]},{"0":[4]},{"1":[5]},{"0":[6]},{"1":[7]},{"1":[9]},{"0":[10]}]
case2:
{
"1": [
1,
3,
5,
7,
9
]
}

最佳答案

第一reduce在您的 merge方法依赖于数组中第一个对象的键。

objs.reduce((a, b) => Object
.keys(a)
// ^-- Takes only the keys from `a`
.map(key => ({ [key]: a[key].concat(b[key] || []) })
// ^^^^^^-- only merges in those keys from `b`
)
要查看实际问题,请移除 01来自您的 key one目的。
为了在不过度偏离当前方法的情况下修复它,您可以确保从 a 中获取两个 key 。和 b :
objs.reduce((a, b) => Object
.keys(Object.assign({}, a, b))
// etc...
)
首先映射到键值对类型的对象然后合并它们仍然感觉有点浪费。

关于Javascript groupBy 实现只产生 1 个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67324901/

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