我的功能并没有使用更高阶函数

时间:2016-02-21 23:07:45

标签: javascript arrays object 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的索引是26"," Ben Bitdiddle现年34岁。等等......]

如果我在控制台中运行mapNameAge(people),它会按预期收回Alyssa的信息。但是当我在控制台中运行mapArr(people, mapNameAge)时,我得到["undefined is undefined", "undefined is undefined", "undefined is undefined", "undefined is undefined"]

有人可以帮我理解这里发生了什么吗? TIA!

1 个答案:

答案 0 :(得分:0)

Elclanrs是对的。因为传入的是单个对象而不是对象的对象,所以不需要遍历该对象。你传递给mapNameAge(obj)的是

{ name: 'Alyssa P. Hacker', age: 26 }

因此,在mapNameAge(obj)中,不是迭代(这就是为什么它返回undefined,因为obj [key] .name不存在),你可以这样做:

function mapNameAge(obj) {
    return obj.name + " is " + obj.age;
}