出于好奇:
MDN教我如何快捷功能应用程序如下:
trim = Function.prototype.call.bind(String.prototype.trim)
join = Function.prototype.call.bind(Array.prototype.join)
现在,我可以映射修剪,但不能出于某种原因加入. join将’,’作为默认参数(分隔符),所以我应该没问题,但它使用数组索引:
> trim = Function.prototype.call.bind(String.prototype.trim)
call()
> [' a','b '].map(trim)
["a", "b"]
> join = Function.prototype.call.bind(Array.prototype.join)
call()
> [['a','b'],['c','d']].map(join)
["a0b", "c1d"]
为什么?
另外,如果我真的想要一个不同的分隔符怎么办?将它传递给bind不起作用,因为它被添加到现有参数之前(在任何时候我映射的列表中的一个元素).然后它将角色的角色加入,如果有分离的话,要加入的字符串将充当分隔符:
> joins = Function.prototype.call.bind(Array.prototype.join,';')
call()
> [['a','b'],['c','d']].map(joins)
[";", ";"]
我研究并发现:
Answers explaining the thing with this
and solutions equivalent to the bind
shortcut I referenced
Similar explanations, the solution using thisArg
again, from MDN’s page about map
A duplicate question with duplicate answers
最佳答案 传递给map的函数接收3个参数.基本上地图就是这样的.
Array.prototype.map = function(f) {
var result = [];
for(var i = 0; i < this.length; i++) {
result.push(f(this[i], i, this));
}
return result;
}
所以当你运行这段代码
[[ ‘A’, ‘B’],[ ‘C’, ‘d’]].图(合并),
这就是地图内部发生的事情
join(['a', 'b'], 0, [['a','b'],['c','d']])
join(['c', 'd'], 1, [['a','b'],['c','d']])
要获得您想要的结果,您可以编写一个可以生成连接函数的函数.例如
function joinSep(separator) {
return function(array) {
return array.join(separator)
}
}
var joins = joinSep(';');
[['a','b'],['c','d']].map(joins)