使用索引而不是字符串值

时间:2017-02-01 04:10:44

标签: javascript ecmascript-6 mapping

在我的地图功能中观察奇怪的行为:

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返回模板字符串来“修复”此问题。但是,我更倾向于以这种方式进行初始化,并且无法理解为什么它仍然无法正常工作。

对我来说,这似乎是一种奇怪的异常现象,是否有人对我失踪的事物有所了解?

1 个答案:

答案 0 :(得分:3)

您的 tpl 函数由JavaScript的map Array方法提供(value, index, 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