2017-02-01 38 views
1

在我的地圖功能觀察奇怪的現象:Map函數返回數組的索引,而不是字符串值

let tpl = ({x}, y = `This is ${x}`) => y; 
 
    
 
console.log(tpl({x:5})); //correctly returns 'This is 5' 
 

 
console.log([{x:1}, {x:9}].map(tpl)); //expecting array of strings, instead get [0, 1]

是可能的「修復」這省去默認變量y,並返回直接來自tpl的模板字符串。不過,我寧願這樣做初始化,也不明白爲什麼它不會起作用。

似乎是一個奇怪的異常對我來說,有人有洞察力我缺少的東西?

+0

到底爲什麼你更喜歡用'y'對其進行初始化時,你可以直接返回像你說的模板字符串?是否因爲您有時傳遞可選的模板字符串來覆蓋默認的字符串? –

+0

這是我想做的一個人爲的例子(例如,可能是函數調用的結果),但它主要是關於美學;我喜歡一個字符的概念返回 – Conqueror

回答

3

您的tpl功能提供(value, index, array)通過JavaScript的映射Array方法。您已給出y的默認值This is ${x}。但是當您通過tpl作爲map的回調時,y未定義,因此不使用默認值。 map正在將索引傳遞給您的y參數。

let tpl = ({x}, y = `This is ${x}`) => y 
const arr = [ {x:1}, {x:9} ]; 
arr.map(tpl) // [0, 1] 
arr.map((value, index, array) => tpl(value)) // [ 'This is 1', 'This is 9' ] 

Array.prototype.map()

Default parameters

+0

謝謝你的洞察力 - 這澄清了我的困惑。 – Conqueror

+0

太棒了,沒問題@Conqueror –

相關問題