Javascript lodash groupBy所有关键点是最有效的方法
我试图找到一种有效的方法来聚合集合中的所有项目 例如,如果值不是子对象或数组,使用Lodash按对象集合的每个键(深度)对对象集合进行分组的最有效方法是什么Javascript lodash groupBy所有关键点是最有效的方法,javascript,grouping,lodash,Javascript,Grouping,Lodash,我试图找到一种有效的方法来聚合集合中的所有项目 例如,如果值不是子对象或数组,使用Lodash按对象集合的每个键(深度)对对象集合进行分组的最有效方法是什么 let input = [{ food: { fruits: { apples: 2, bananas: 3, peaches: 'square', citrus: [100,200,300] },
let input = [{
food: {
fruits: {
apples: 2,
bananas: 3,
peaches: 'square',
citrus: [100,200,300]
},
meat: {
beef: 1000,
chicken: 2000
}
}
},{
food: {
fruits: {
apples: 4,
bananas: 5,
peaches: 'triangle',
citrus: [101,201,301]
},
meat: {
beef: 1001,
chicken: 2001
}
}
}];
let output = {
food: {
fruits: {
apples: [2,4],
bananas: [3,5],
peaches: ['square', 'triangle'],
citrus: [[100,101],[200,201],[300,301]]
},
meat: {
beef: [1000, 1001],
chicken: [2000, 2001]
}
}
}
API中似乎没有这样做的函数,我想知道是否有一种方法可以在一个过程中做到这一点,而不必在初始集合上重复多次。您可以按如下方式使用:
const output = _.mergeWith({}, ...input, (t, s) => {
if (!_.isObject(s)) return t ? [...t, s] : [s]
});
const输入=[{
食物:{
水果:{
苹果:2,
香蕉:3,
桃子:“方形”,
柑橘类:[100200300]
},
肉类:{
牛肉:1000,
鸡肉:2000
}
}
}, {
食物:{
水果:{
苹果:4,
香蕉:5,
桃子:“三角形”,
柑橘:[101201301]
},
肉类:{
牛肉:1001,
鸡肉:2001
}
}
}];
常量输出=\与({},…输入合并,(t,s)=>{
如果(!\u.isObject(s))返回t?[…t,s]:[s]
});
控制台日志(输出)代码>
输出的citrus
有3个数组,而不是2个,这是故意的吗?与所有这些类型的问题一样,您需要查看Array.prototype.reduce
。此外,第一项有peach
,第二项有peaches
。类似的问题与citrus
和critus
以及beaf
可能是beef
。编程中的拼写问题是的,对不起,我直接在这里编辑了我的示例,我应该在IDE中完成。它是固定的,对于citrus,它应该是一个数组数组,假设集合中的所有项目在属性大小等方面都是同质的。我不知道我怎么会在文档中遗漏它,可能与我犯了这么多不一致的错误的原因相同:我应该多睡一会儿:)。谢谢你的回答,这正是我想要的。