为什么以下工作没有? (Chrome,因此没有Arrays.map的问题)
[" a ", "b", " c", "d "].map(String.prototype.trim)
TypeError: String.prototype.trim called on null or undefined
答案 0 :(得分:14)
map
将数组的每个元素作为参数传递给函数:
[element1, e2].map(myFunction); // --> myFunction(element1); myFunction(e2)
String.prototype.trim
不是传递要剪裁的字符串的函数。您将该函数称为该字符串的方法,而不是:
" some string ".trim(); // "some string"
要在trim
中使用.map
,您需要执行以下操作:
[" a ", "b", " c", "d "].map(function(e){return e.trim();});
答案 1 :(得分:5)
这实际上是因为Array.map()
函数应该有currentElement
作为参数,而String.prototype.trim
不接受任何参数,因此我们不能这样调用它。
所以,你必须这么做:
[" a ", "b", " c", "d "].map(function(elem){
return elem.trim();
});
答案 2 :(得分:2)
一个带有箭头功能的较短版本:
[" a ", "b", " c", "d "].map(e => e.trim());
答案 3 :(得分:1)
使用Ramda(Javascript函数式编程库):
> var R = require('ramda')
undefined
> [" a ", "b", " c", "d "].map(R.trim)
[ 'a', 'b', 'c', 'd' ]
此示例是使用built-in node repl。
制作的