2017-10-19 85 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}}