pipe道过滤和lodash处理
我有以下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
。 - 这些操作是CPU密集型的,涉及数据库访问。
问题:
- 我怎样才能过滤这些特殊的物品,处理它们,然后把剩下的东西还回来? 最好尽可能less的通过,因为
data
包含超过40,000个项目。 - 使用同步迭代是否可接受,性能明智? 这段代码将被执行400次(全部在同一时间)。
假设您可以确定哪些项目组将由processSpecialItems
处理,这可能是_.partition
一项工作。
从文档 :
创build一个分成两组的元素数组,其中第一个包含谓词返回truthy的元素,第二个包含predicate返回falsey的元素。
_.partition(auctions, isSpecial)
将返回[specialItems, commonItems]
(其中specialItems
和commonItems
是适当的项目数组)。 然后你可以让processSpecialItems
在第一个元素上运行,而processCommonItems
在第二个元素上运行。
第一步不要分组项目,下一步
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 }
- Node.js:如何以编程方式确定asynchronous?
- 未处理的拒绝错误。 即使testing通过
- 为什么node.jsasynchronous模块在使用async.eachLimit(array,limit,function,callback)的第一步之后停止?
- Node.js:你能使用stream内的asynchronous函数吗?
- Node.js&Redis; 等待一个循环完成
- 可以有很多function(超过10)来处理Node的asynchronous性质(特别是在添加到MySql数据库时)
- 你如何计算使用Node,Async和Mongoose的范围variables的总和?
- 如何在node.js中创build自定义asynchronous函数?
- NodeJS如何处理asynchronous文件IO?