Source

map.js

import each from './each';

/** 对传入数组的每个值执行映射方法,并返映射后值一个新的数组
 * 
 * @param {Array} obj 传入对象
 * @param {iteratorCallback} iterator 迭代器映射方法
 * @returns 源数组每个元素执行映射方法后的的结果组成的新数组
 * @category Array
 * @function map
 * @example
 * var v =map([1,2,3],function(v,i,arr){
 *   console.log(v,i,arr);
 *   return v+10;
 * })
 * // 1 0 [1, 2, 3]
 * // 2 1 [1, 2, 3]
 * // 3 2 [1, 2, 3]
 * v // [11,12,13]
 */
export default function map(obj, iterator) {
  var results = [];
  // Not using strict equality so that this acts as a
  // shortcut to checking for `null` and `undefined`.
  if (obj == null) {
    return results;
  }
  if (Array.prototype.map && obj.map === Array.prototype.map) {
    return obj.map(iterator);
  }
  each(obj, function (value, index, list) {
    results.push(iterator(value, index, list));
  });
  return results;
}