我的函数没有返回我期望使用高阶函数的结果
My function isn't returning what I expect using higher order functions
我有一个无法解决的问题,这是我的代码:
var people = [
{name: "Alyssa P. Hacker", age: 26},
{name: "Ben Bitdiddle", age: 34},
{name: "Eva Lu Ator", age: 19},
{name: "Lem E. Tweakit", age: 40}
];
function map(arr, f){
var finalArr = [];
each(arr, function(arrI){
finalArr.push(f(arrI))
})
return finalArr;
}
function mapNameAge(obj){
for (var key in obj){
return obj[key].name + " is " + obj[key].age;
}
}
function mapArr(obj, f){
return map(obj, mapNameAge);
}
正如您在 mapArr 函数中看到的那样,我正在尝试使用 map 将字符串推送到 finalArr,它包含索引 ["Alyssa P. Hacker is 26"、"Ben Bitdiddle is 34" 等等...]
如果我在控制台中 运行 mapNameAge(people)
,它会按预期返回 Alyssa 的信息。但是当我在控制台中 运行 mapArr(people, mapNameAge)
时,我得到 ["undefined is undefined", "undefined is undefined", "undefined is undefined", "undefined is undefined"]
有人可以帮助我了解这里发生了什么吗? TIA!
Elclanrs 是正确的。因为您传入的是单个对象,而不是对象的对象,所以不需要遍历该对象。你传递给 mapNameAge(obj) 的是
{ name: 'Alyssa P. Hacker', age: 26 }
因此,在 mapNameAge(obj) 中,无需迭代(这就是返回 undefined 的原因,因为 obj[key].name 不存在),您可以这样做:
function mapNameAge(obj) {
return obj.name + " is " + obj.age;
}
我有一个无法解决的问题,这是我的代码:
var people = [
{name: "Alyssa P. Hacker", age: 26},
{name: "Ben Bitdiddle", age: 34},
{name: "Eva Lu Ator", age: 19},
{name: "Lem E. Tweakit", age: 40}
];
function map(arr, f){
var finalArr = [];
each(arr, function(arrI){
finalArr.push(f(arrI))
})
return finalArr;
}
function mapNameAge(obj){
for (var key in obj){
return obj[key].name + " is " + obj[key].age;
}
}
function mapArr(obj, f){
return map(obj, mapNameAge);
}
正如您在 mapArr 函数中看到的那样,我正在尝试使用 map 将字符串推送到 finalArr,它包含索引 ["Alyssa P. Hacker is 26"、"Ben Bitdiddle is 34" 等等...]
如果我在控制台中 运行 mapNameAge(people)
,它会按预期返回 Alyssa 的信息。但是当我在控制台中 运行 mapArr(people, mapNameAge)
时,我得到 ["undefined is undefined", "undefined is undefined", "undefined is undefined", "undefined is undefined"]
有人可以帮助我了解这里发生了什么吗? TIA!
Elclanrs 是正确的。因为您传入的是单个对象,而不是对象的对象,所以不需要遍历该对象。你传递给 mapNameAge(obj) 的是
{ name: 'Alyssa P. Hacker', age: 26 }
因此,在 mapNameAge(obj) 中,无需迭代(这就是返回 undefined 的原因,因为 obj[key].name 不存在),您可以这样做:
function mapNameAge(obj) {
return obj.name + " is " + obj.age;
}