已解决:我的对象值赋值应该是[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;
});
});
}
答案 0 :(得分: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;
});
};
当只有一个参数时,括号是可选的。如果正文是一个表达式,则可以省略curles。因此,我们可以删除可选语法:
const transformEmployeeData = arrayOfArray =>
arrayOfArray.map(arr => {
const map = {};
arr.forEach(arr => {
map[arr[0]] = arr[1];
});
return obj;
});
像airbnb这样的编码风格表明如果我们有卷曲,我们就不会删除parenses,因此:
const transformEmployeeData = arrayOfArray =>
arrayOfArray.map((arr) => {
const map = {};
arr.forEach((arr) => {
map[arr[0]] = arr[1];
});
return obj;
});
箭头功能不会绑定this
所以这些只是因为我们没有使用this
而相同。