繁体   English   中英

array.map遍历数组以返回对象数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM