2017-02-01 6 views
1

マップ機能は、私のマップ機能で奇妙な行動を観察

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

これは、私がやりたいこと(たとえば、関数呼び出しの結果かもしれません)の意図した一種の例ですが、それは主に美学に関するものです。私は1文字のコンセプトが好きです – Conqueror

答えて

3

tpl機能は、JavaScriptのマップ配列メソッド(value, index, array)によって提供されています。 yにはデフォルト値のThis is ${x}が設定されています。しかし、mapへのコールバックとしてtplを渡すと、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 –