我的函数没有返回我期望使用高阶函数的结果

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;
}