underscore.js 分析6 map函数

Posted 飞凡123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了underscore.js 分析6 map函数相关的知识,希望对你有一定的参考价值。

作用:通过转换函数(iteratee迭代器)映射列表中的每个值产生价值的新数组。iteratee传递三个参数:value,然后是迭代 index。

 

_.map([1, 2, 3], function(num){ return num * 3; });
=> [3, 6, 9]
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
_.map([[1, 2], [3, 4]], _.first);
=> [1, 3]

 

调用过程:

1. 

  // Return the results of applying the iteratee to each element.
  _.map = _.collect = function(obj, iteratee, context) {
    iteratee = cb(iteratee, context);
    var keys = !isArrayLike(obj) && _.keys(obj),
        length = (keys || obj).length,
        results = Array(length);
    for (var index = 0; index < length; index++) {
      var currentKey = keys ? keys[index] : index;
      results[index] = iteratee(obj[currentKey], currentKey, obj);
    }
    return results;
  };

2. cb函数  应该是callback的缩写。

  // An internal function to generate callbacks that can be applied to each
  // element in a collection, returning the desired result — either `identity`,
  // an arbitrary callback, a property matcher, or a property accessor.
  var cb = function(value, context, argCount) {
    if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);
    if (value == null) return _.identity;
    if (_.isFunction(value)) return optimizeCb(value, context, argCount);
    if (_.isObject(value)) return _.matcher(value);
    return _.property(value);
  };

 这里等于又接着调用optimizeCb,关于optimizeCb在_.each分析中有介绍,不在复述。

 

以上是关于underscore.js 分析6 map函数的主要内容,如果未能解决你的问题,请参考以下文章

Underscore.js基础入门

HiShop2.x版本中的上传插件分析,得出所用的模板语言为Underscore.js 1.6.0且自己已修改

Underscore js是一个JavaScript实用库

Underscore js是一个JavaScript实用库

backbone 唯一依赖库Underscore.js

underscore.js源码阅读