2017-07-26 26 views
1
稀有有用lodash资源的

我一个我发现这个为例LoDash _.invokeMap()参数

var object = { 
 
      firstName: 'Fredrick', 
 
      lastName: 'Townsend', 
 
      first: function() { 
 
       return this.firstName; 
 
      }, 
 
      last: function() { 
 
       return this.lastName; 
 
      } 
 
    }; 
 

 
var methods = _.map(_.functions(object), function(item) { 
 
return [ _.bindKey(object, item) ]; 
 
}); 
 

 
_.invokeMap(methods, 0);

我不理解的第二个参数(0)invokeMap

回答

1

首先,让我们看看更简单的例子:

var array = [ 
 
    [function() { console.log('1') }, function() { console.log('2') }], 
 
    [function() { console.log('3') }, function() { console.log('4') }] 
 
]; 
 

 
console.log('_.invokeMap(array, 0)'); 
 
_.invokeMap(array, 0); 
 

 
console.log('_.invokeMap(array, 1)'); 
 
_.invokeMap(array, 1);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

现在你的代码:

var methods = _.map(_.functions(object), function(item) { 
    return [ _.bindKey(object, item) ]; // <== ! return array 
}); 

功能迭代器从一个元素_.map回报阵列。因此,在你的例子中,变量methods是两个元素的数组,每个元素都是一个元素的另一个数组。

enter image description here

当通过0如这里第二个参数_.invokeMap(methods, 0); lodash将从methods迭代并且调用其存储在所述阵列的所述第一元件的功能。

_.invokeMap方法的文件。