【发布时间】:2018-06-04 18:45:23
【问题描述】:
我正在尝试找到一种有效的方法来聚合集合中的所有项目。
例如,如果值不是子对象或数组,Lodash 最有效的方法是如何按每个键(深度)对对象集合进行分组?
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 中似乎没有一个函数可以执行此操作,我想知道是否有一种方法可以一次性完成此操作,而无需在初始集合上多次迭代。
【问题讨论】:
-
输出
citrus有3个数组,不是2个,是故意的吗? -
与所有这些类型的问题一样,您需要查看
Array.prototype.reduce。 -
另外,第一项具有
peach,第二项具有peaches。citrus和critus和beaf的类似问题可能应该是beef。编程中的拼写问题 -
是的,对不起,我直接在这里编辑了我的示例,我应该在 IDE 中完成。它是固定的,对于柑橘,它应该是一个数组数组,假设集合的所有项目在属性大小等方面都是同质的。
标签: javascript grouping lodash