我有以下lodash伪代码,它将处理auctions
:
var auctions = [{'item': 12345, ...}, {'item': 12345, ...}, {'item':23436, ...}];
var process = function(auctions) {
_(auctions)
.groupBy('item')
.thru(processSpecialItems)
.each(processCommonItems)
.value();
}
每个函数都取决于前一个函数的结果,但在processSpecialItems
和processCommonItems
的情况下:
item
,即。由给定item
值标识的组将由processSpecialItems
处理。processCommonItems
。问题:
data
包含超过40,000项。答案 0 :(得分:1)
假设您能够提前确定processSpecialItems
将处理哪些项目组,这可能是_.partition
的工作。
来自docs:
创建一个分为两组的元素数组,第一组包含谓词返回truthy的元素,第二组包含谓词返回falsey的元素。
_.partition(auctions, isSpecial)
将返回[specialItems, commonItems]
(其中specialItems
和commonItems
是适当的项目数组)。然后,你可以让processSpecialItems
对第一个元素进行操作,processCommonItems
对第二个元素进行操作。
答案 1 :(得分:0)
不要在第一步分组项目,下一步
var process = function(auctions) {
return _(auctions)
.partition(function(obj) {
// use here partition condition,
// which return true for special item,
// something like
return _.startsWith(obj.item, 's');
})
// you receive array of 2 arrays where
// first array - array of special items
// second array - array of common items
.thru(function(array){ // process items
return [
_.map(array[0], functionToProcessSpecialItem),
_.map(array[1], functionToProcessCommonItem)
];
})
.flatten() // flat result
.groupBy('item') // and group
.value(); // you receive grouped and processed auctions
}