javascript - 带String.trim的Array.map

时间:2014-08-06 13:56:03

标签: javascript

为什么以下工作没有? (Chrome,因此没有Arrays.map的问题)

[" a ", "b", " c", "d "].map(String.prototype.trim)

TypeError: String.prototype.trim called on null or undefined

4 个答案:

答案 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

制作的