Array.map 和 Javascript 中的提升函数
Array.map and lifted functions in Javascript
怎么来了
var a = "foo / bar/ baz ".split('/');
a.map( function (e) { return String.prototype.trim.call(e) } )
有效,而这不...
a.map( String.prototype.trim );
试试这个:
a.map(Function.prototype.call.bind(String.prototype.trim ))
之所以这样做而只是映射String.prototype.trim
不起作用,是因为正如其他人指出的那样,当函数尝试修剪数组元素时,this
将未定义。这个解决方案的作用是,它创建一个新函数,该函数将this
值作为函数String.prototype.trim
。由于新函数是Function.prototype.call
的修改版本,因为map
称这个函数传递给数组元素,本质上执行的是:Function.prototype.call.call(String.prototype.trim, element)
。这会在传入的元素上运行函数String.prototype.trim
,您将获得修剪后的结果。这也将起作用:
a.map(Function.call, "".trim)
通过利用第二个参数map
接受thisArg
的事实.对于一点点语法糖,你可以创建一个看起来像这样的函数:
Array.prototype.mapUsingThis = function(fn) { return this.map(Function.call, fn); };
然后,您可以调用
a.mapUsingThis("".trim)
诸如此类。
String.prototype.trim 是一个非参数函数,它将由字符串本身调用,但映射函数需要一个 func arg 接受 str 作为参数
'this'
在第一种情况下引用字符串参数,而在第二种情况下,"this"变得未定义,因为String.prototype.trim
未绑定到任何对象。
相关文章:
- 回调函数中传递参数的困难(Google Map API Markers)
- 鉴于 for..在构造中,库提供的函数(如 jQuery.map() 或 _.each())有什么用
- 在.map函数中使用react道具
- Map函数没有't迭代所有子项
- 在CouchDB Map函数中发出日期时-对日期对象调用的内容
- 在javascript函数中访问Google map api
- Array.from 在 Array#map 中不能用作直接回调函数
- 如何将回调函数添加到 .map 方法
- TypeError:map[msg[1]]不是函数
- angular google maps TypeError:$scope.map.control.refresh不是函数
- MongoDB map/reduce,forEach不是一个函数
- 获得“;jvm.Map不是构造函数“;用于jvectormap
- Javascript作用域规则和mongo-map/reduce函数
- map() 函数如何在数组上工作
- Javascript如何使用高阶函数和Map/Reduce函数来汇总多个数组
- React.jsthis.props.data.map()不是函数
- 使用map函数对具有数字数组的字符串进行解码
- 在 mongo map 中调用外部 javascript 函数(对象)或减少上下文的可能方法
- 使用下划线 js map 函数时,Mongo 引用字段未实例化
- Javascript vs Python 关于 Python 'map()' 函数