reduce 为数组中的每个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。javascript
arr.reduce(callback,[initialValue])
previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))java
currentValue (数组中当前被处理的元素)数组
index (当前元素在数组中的索引)dom
array (调用 reduce 的数组)koa
今天在看koa的源码,看到其中用到个only模块,去看了一下该模块,整个模块就一个简单的返回reduce方法操做的对象:函数
var only = function(obj, keys){ obj = obj || {}; if ('string' == typeof keys) keys = keys.split(/ +/); return keys.reduce(function(ret, key){ if (null == obj[key]) return ret; ret[key] = obj[key]; return ret; }, {}); };
经过对reduce概念的理解,这个模块主要是想新建并返回一个obj对象中存在的keys的object对象。code
var a = { env : 'development', proxy : false, subdomainOffset : 2 } only(a,['env','proxy']) // {env:'development',proxy : false}