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