2015-12-13 41 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