2016-02-21 55 views
0

我有想不通的問題,這裏是我的代碼:我的函數沒有返回我的期望使用高階函數

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功能看,我想使用地圖將字符串推入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

'obj [key] .name'不存在...你不需要循環。 'people.map(function(obj){return obj.name +'is'+ obj.age})' – elclanrs

+0

謝謝!我想我很困惑,因爲這是我做的第一件事:'''map(people,function(x){var key in people){return to people [key] .name; } })''我把它輸入到控制檯,它正在工作。我只是不確定爲什麼分手這兩個不起作用......再次感謝! –

回答

0

Elclanrs是正確的。由於您傳遞的是單個對象,而不是對象的對象,因此不需要遍歷該對象。什麼要傳遞到mapNameAge(OBJ)是

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

正因爲如此,在mapNameAge(OBJ),而不是迭代(這就是爲什麼它返回undefined,因爲OBJ [關鍵]。名稱不存在),你可以這樣做:

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

工作正常!我認爲我仍在努力理解更高層次的功能。很高興你們能幫助! –