2016-10-04 55 views
-1

所以我剛剛學會了如何爲for循環創建一個函數。 下面是我們所擁有的:在向數組推送特定鍵時遇到問題

function each(array, func) { 
    for (var i = 0; i <array.length; i++) { 
     func(array[i]); 
    } 
} 

現在我試圖把目前正使用一個for循環已經取得功能,並與每個替換它。

var people = [ 
    {name: {first: "Alyssa", middle: "P.", last: "Hacker"}, age: 26}, 
    {name: {first: "Ben", last: "Bitdiddle"}, age: 34} 
]; 

function ages1(people) { 
    var acc = []; 
    for (var i = 0; i < people.length; i++) { 
    acc.push(people[i].age); 
    } 
    return acc; 
} 

該函數返回[26,34]

所以現在我創造了這個:

function ages(people) { 
    var acc = []; 
    each(people, function(age) { 
     acc.push(people[i].age); 
    }); 
    return acc; 
} 

我收到一條 「我沒有定義」 的錯誤。如果我不能使用i來引用每個數字,我還能如何將每個年齡推入新數組?

+0

FUNC(陣列[I]); < - 你已經有了數組元素,所有你需要的是用acc.push(age.age)改變acc.push(people [i] .age)。 – GSazheniuk

+0

現在學習如何使用瀏覽器開發工具進入和調試變量......編寫代碼只是戰鬥的1/2 ...學習自己調試它是最有價值的 – charlietfl

+0

爲什麼不只是'var ages = people.map (x => x.age);' - > https://jsfiddle.net/2jyv9w0o/ – adeneo

回答

1

你應該這樣做:

function ages(people) { 
    var acc = []; 
    each(people, function(person) { 
     acc.push(person.age); 
    }); 
    return acc; 
} 

順便說一句,JavaScript有一個本地forEach功能,做您的each函數做什麼,而且可能更快/更穩健。

所以它的陣列這樣所用它在Array的原型:

people.forEach(function(person) { 
    acc.push(person.age); 
}) 
+0

謝謝!如果我使用函數(年齡),然後使用acc.push(age.age)或函數(glabargh)和acc.push(glabargh.age)等任何其他詞,但我們爲什麼要這樣做? – bikedres

+0

因爲在你的'each'函數中,它將當前人送入你的函數(稱爲回調函數),然後在頂部的'... function(person){...'中定義它,所以現在的人,在函數,等於當前數組項目。 – 2016-10-04 20:32:25

相關問題