我有一个我无法弄清楚的问题,这是我的代码:
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!
答案 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;
}