1

解決:我的對象賦值應該是一個[1]不OBJ [1]如何寫不箭頭功能該功能

我練了JavaScript的一些函數式編程,我還沒有完全理解使用箭頭功能,所以我試圖擺脫使用。這是我的問題集的解決方案,但我需要幫助以我理解的方式編寫它。

function transformEmployeeData(array){ 
    return array.map(a =>{ 
    var obj = {}; 
    a.forEach(a => obj[a[0]] = a[1]); 
    return obj; 
}); 

這是我如何重寫函數,但它不編譯。任何人都可以幫我理解我的缺點嗎?

function transformEmployeeData(array) { 
    return array.map(function(x) { 
    var obj = {}; 
    x.forEach(function(a){ 
    obj[a[0]] = obj[1]; 
    return obj; 
    }); 
}); 
} 
+4

'返回obj'不應該是裏面'forEach' – slebetman

+0

@slebetman,謝謝。但是,糾正此問題後,代碼仍然不起作用。 – ayeteo

+0

您原來使用兩個'在嵌套循環中聲明瞭'變量,所以它的結果無關,與你,在你的第二個功能,定義爲'x',所以錯誤可能是在那裏。但是,箭頭函數非常簡單,您不需要了解它們的複雜性,就可以理解它們:'(arguments)=>執行並返回結果。它只是沒有自己的'this'對象(在大多數情況下,你不會使用它)。 – somethinghere

回答

0

通過使它們成爲命名函數,很容易省略兩個箭頭函數和匿名函數。這裏是我的建議:

function transformEmployeeData(arrayOfArray) { 
    function transform(arr) { 
    const map = {}; 
    function registerMap (arr) { 
     map[arr[0]] = arr[1]; 
    } 
    arr.forEach(registerMap); 
    return obj; 
    } 
    return arrayOfArray.map(transform); 
}; 

我們可以重寫命名功能,使用綁定到一個函數表達式:

const transformEmployeeData = function(arrayOfArray) { 
    const transform = function (arr) { 
    const map = {}; 
    const registerMap = function (arr) { 
     map[arr[0]] = arr[1]; 
    } 
    arr.forEach(registerMap); 
    return obj; 
    } 
    return arrayOfArray.map(transform); 
}; 

,然後我們可以改寫這回箭頭功能:

const transformEmployeeData = (arrayOfArray) => { 
    const transform = (arr) => { 
    const map = {}; 
    const registerMap = (arr) => { 
     map[arr[0]] = arr[1]; 
    } 
    arr.forEach(registerMap); 
    return obj; 
    } 
    return arrayOfArray.map(transform); 
}; 

然後,我們可以用它的定義替換變量:

const transformEmployeeData = (arrayOfArray) => { 
    return arrayOfArray.map((arr) => { 
     const map = {}; 
     arr.forEach((arr) => { 
      map[arr[0]] = arr[1]; 
     }); 
     return obj; 
    }); 
}; 

當只有一個參數,那麼括號是可選的。如果身體是一個表達式,你可以省略curlies。喜歡的Airbnb表明我們不會刪除parenses如果我們有花括號

const transformEmployeeData = arrayOfArray => 
    arrayOfArray.map(arr => { 
     const map = {}; 
     arr.forEach(arr => { 
      map[arr[0]] = arr[1]; 
     }); 
     return obj; 
    }); 

編碼風格,因而:因此,我們可以刪除可選語法

const transformEmployeeData = arrayOfArray => 
    arrayOfArray.map((arr) => { 
     const map = {}; 
     arr.forEach((arr) => { 
      map[arr[0]] = arr[1]; 
     }); 
     return obj; 
    }); 

箭功能不綁定this所以這些都是平等的只是因爲我們沒有使用this