Pet*_*ete 7 javascript underscore.js lodash
从有关invoke方法的文档中,我读到:
在集合中的每个元素上调用methodName命名的方法,返回每个调用方法的结果数组
因此,我假设以下代码是同义词,但事实并非如此:
_.map(items, function(item) {
return _.omit(item, 'fieldName');
})
_.invoke(items, _.omit, 'fieldName');
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该invoke方法生成一个字符串数组,而map方法返回fieldName从每个项目中删除的项目数组.
invoke方法实现与map函数相同的结果?invoke在这种特殊情况下返回字符串数组?var items = [{id:1, name:'foo'},
{id:2, name:'bar'},
{id:3, name:'baz'},
{id:4, name:'qux'}];
console.log(
_.invoke(items, _.omit, 'id')
);
console.log(
_.map(items, function(item) {
return _.omit(item, 'id');
})
);Run Code Online (Sandbox Code Playgroud)
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.3.1/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
var result = _.invoke(items, fn, extraArgs)
Run Code Online (Sandbox Code Playgroud)
相当于
var result = [];
for (var i=0; i<items.length; i++) {
result.push( fn.apply(items[i], extraArgs) );
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您想要与地图相同的结果,那就是
_.invoke(items, function() {
return _.omit(this, 'id');
})
Run Code Online (Sandbox Code Playgroud)
唯一的区别是,item它不是函数的参数,而是需要this在函数应用于项目时使用.
请务必记下您正在使用的lodash版本.
v4.11.1 _.invokeMap在对集合进行操作时使用:
_.invokeMap([1,2,3], function () {
console.log(this)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7736 次 |
| 最近记录: |