2017-10-19 86 views
1

假设我想转的array.map迭代返回一个对象数组

let originalArray = [a,b,c] 

阵列到这种格式的一个阵列:

[{0:a},{1:b},{2:c}] 

我使用映射函数到originalArray遍历这样

originalArray.map((val, i) => {i:val}) 

但是它返回所有未定义的值。我的问题是我如何使用地图功能来达到预期的效果?

+0

据解释'{}'作为块不是对象包裹大括号中的括号(这只是的事情停止该一个。加工) – evolutionxbox

回答

3

您需要使用[]表示法来评估表达式并使用它下面的值。同样用()括号包装返回的对象,如果没有这个,编译器就会知道对象的开始{,因为箭头函数体开始时会出现错误的结果。

let originalArray = ['a','b','c']; 
 
let mappedArray = originalArray.map((item, index) => ({[index]: item})); 
 

 
console.log(mappedArray);

你的代码片段是这样的一个,而如果你不明确未定义默认返回返回任何东西,它。

let originalArray = ['a','b','c']; 
 
let mappedArray = originalArray.map((item, index) => { 
 
    index: item; 
 
    return undefined; 
 
}); 
 

 
console.log(mappedArray);

0

你的箭头功能语法不正确,因为在这种情况下,{}被解释为块分隔符:

(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值,但封闭在块分隔符,你需要明确的用户“回归”声明:

$ node 
> let f = (x)=>{x+1} 
undefined 
> f(3) 
undefined 
> let f = (x)=>{return x+1} 
undefined 
> f(3) 
4 

或者你可以做这样的事情,但是,在这种情况下,利用箭头功能会变得毫无意义IMHO:

(val, i) => {return {i:val}}