[英]array.map iterates over an array to return an object array
假设我想转一个数组
let originalArray = [a,b,c]
进入这种格式的数组:
[{0:a},{1:b},{2:c}]
我正在使用map函数来迭代originalArray
originalArray.map((val, i) => {i:val})
但是它返回所有未定义的值。 我的问题是我如何使用地图功能来实现我的预期结果?
您需要对属性名称使用[]
表示法来计算表达式并使用其下的值。 还用()
括号包装返回的对象,如果没有这个,编译器会理解对象的起始{
,因为箭头函数体开始并给出错误的结果。
let originalArray = ['a','b','c']; let mappedArray = originalArray.map( (item, index) => ({[index]: item})); console.log(mappedArray);
您的代码片段与此类似,如果您没有显式返回任何内容,则默认情况下返回undefined。
let originalArray = ['a','b','c']; let mappedArray = originalArray.map( (item, index) => { index: item; return undefined; }); console.log(mappedArray);
你的箭头函数在语法上是不正确的,因为在那个上下文中, {
和}
被解释为块分隔符:
(val, i) => {i:val} // Here '{' and '}' are a block delimiters.
您至少需要将它括在括号之间以强制它被解释为对象表达式:
(val, i) => ({[i]:val}) // This works.
// Also notice the '[' and ']' surrounding "i" meaning that the
// value of i should be used as key instead of actual "i".
想一想:
(val, i) => {i, val}
......应该归还什么? {i:<i_value>, val:<val_value>}
或未定义(因为i, val
计算为val值,但是在封闭在块分隔符中时,您需要显式地使用'return'语句:
$ node
> let f = (x)=>{x+1}
undefined
> f(3)
undefined
> let f = (x)=>{return x+1}
undefined
> f(3)
4
或者你可以做这样的事情,但是,在这种情况下使用箭头功能将变得毫无意义恕我直言:
(val, i) => {return {i:val}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.