1

reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。

reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。

语法:

arr.reduce(callback,[initialValue])
  • callback (执行数组中每个值的函数,包含四个参数)
    1. previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))

    2. currentValue (数组中当前被处理的元素)

    3. index (当前元素在数组中的索引)

    4. array (调用 reduce 的数组)

  • initialValue (作为第一次调用 callback 的第一个参数。)

今天在看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对象。

var a = {
    env : 'development',
    proxy : false,
    subdomainOffset : 2
}
only(a,['env','proxy'])   // {env:'development',proxy : false}

krew
1.3k 声望25 粉丝

脚踏实地