2015-12-13 25 views
4

我有点被Array.map功能的所作所为感到困惑:array.map在字符串中连接时自动附加逗号?

var arr = ['one', 'two', 'three']; 
var result = ''; 
result += arr.map(function(elm) { 
    return elm; 
}); 

// 'one,two,three' 

它是如何自动加入了,返回的结果?

注意:这只会发生如果我连接返回的结果在一个字符串。

回答

9

Array.map没有做任何你的阵列。

基本上,你这样做

'' + ['one', 'two', 'three'] 

其中要求一个数组,其默认行为是join(',')阵列的toString()方法。

1

这个逗号源于toString()方法Array而不是map()函数!

var arr = ['one', 'two', 'three']; 

arr.toString(); // 'one,two,three' 

var result = ''; 
result += arr.map(function(elm) { 
    return elm; 
}); 

result.toString(); // 'one,two,three' 
2
var arr = ['one', 'two', 'three']; 
var result = ''; 
var r = arr.map(function(elm) { 
    result = result + ' ' + elm; 
    return elm; 
}); 
alert('r-> ' + r); 
alert('result-> ' + result); 

这是因为arr.map功能是处理在阵列中的每个元素之后返回而不是针对单个元件你期望要附加到“结果”变量。如果您希望将值连接到'result'变量,则应该在map函数内为每个元素执行此操作。正如Sirko所说,逗号来自toString()方法。 检查上面的代码上的jsfiddle这里:http://jsfiddle.net/qt3nryLq/

参考Array.map():https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

+0

https://stackoverflow.com/a/16607599/3177115 ...是一个非常优雅的解决方案 – Gerfried