接受函数(对象或数组,迭代器)出现问题

时间:2018-12-20 05:48:37

标签: javascript

我认为我最大的问题是关于参数“迭代器”的问题。 我猜它接受一个功能。 我应该为该功能提供参数吗?

// Call iterator(value, key, collection) for each element of collection.
// Accepts both arrays and objects.

_.each = function(collection, iterator) 
{
  if (typeof collection=='object') 
  {
    for(let i=0; i<Object.keys(collection).length; i++) 
    {
      iterator(collection[i],Object.keys(collection)[i],collection);
    }
  }
  else 
  {
    for(let i=0; i<collection.length; i++) 
    {
      iterator(collection[i],i,collection);
    }
  }
};

1 个答案:

答案 0 :(得分:2)

lodashunderscore都将此称为 iteratee 而不是迭代器。这可能是为了避免与javascript迭代器混淆。

iteratee是一个将为您调用的函数。您定义了函数,each将为集合中的每个项目调用它。该文档将告诉您该函数的签名应为什么样。例如,underscore(element, index, list)传递给每个项目的函数。您可以自行编写函数并决定如何处理这些参数。

例如,来自Lodash的

_.forEach([1, 2], function(value) {
    console.log(value);
 });

iteratee是匿名函数,仅使用value参数。