jma*_*rje 5 javascript callback higher-order-functions underscore.js
为什么使用_.map()的reverse2函数可以工作,但arr.map()在这种情况下不起作用?有语法问题吗?我无法弄明白.
function reverse2(arr){
return _.map(arr, function(val,index, arr1){return arr1.pop();});
}
console.log(reverse2([1,2,3,4,5,6])); // logs [6,5,4,3,2,1]
function reverse3(arr){
return arr.map(function(val,index, arr1){return arr1.pop();});
}
console.log(reverse3([1,2,3,4,5,6])); // logs [6,5,4,undefined, undefined, undefined]
Run Code Online (Sandbox Code Playgroud)
这是一个棘手的问题.为了解释为什么Array.prototype.map以这种方式运行,我们需要检查规范.所以:
这里要注意的重点是#2和#6.从它们中可以看出,map创建一个与原始数组长度相同的新数组.
然后关于方法的同一部分的另一件事:
...如果更改了数组的现有元素,它们传递给callbackfn的值将是时间映射访问它们时的值; 不会访问在调用map之后和访问之前删除的元素.
它给出了你的问题的答案:map将创建一个相同长度的数组,但是因为在迭代函数中你从原始数组中移除元素(with pop),新数组仅填充原始的后半部分.
为什么下划线_.map功能表现不同?因为它的实现迭代原始数组的所有项.因此差异.
| 归档时间: |
|
| 查看次数: |
3773 次 |
| 最近记录: |