2016-10-04 3 views
-1

Итак, я просто научился создавать функцию для цикла for. Вот что мы имеем:Не удалось нажать конкретный ключ в массив

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

Сейчас я пытаюсь взять уже сделал функцию, которая использует для цикла, и заменить его с каждым.

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 (массив [я]); <- у вас уже есть элемент массива, все, что вам нужно, это изменить acc.push (people [i] .age) с acc.push (age.age). – GSazheniuk

+0

теперь узнайте, как вставлять и отлаживать переменные, используя инструменты вашего браузера dev ... писать код - это только 1/2 битвы ... научиться самому отлаживать его самому, самое ценное – charlietfl

+0

Почему бы не просто «var age = people.map» (x => x.age); '-> h.age);' -> h.psps://jsfiddle.net/2jyv9w0o/ – adeneo

ответ

1

Вы должны сделать это:

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

Кстати, JavaScript имеет встроенную forEach функцию, которая делает то, что делает ваша each функция, и, вероятно, быстрее/более надежной.

Это в прототипе Array «s поэтому он используется в массиве, как это:

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

Спасибо! Я вижу, как это работает, если я использую функцию (возраст), затем acc.push (age.age) или любую другую функцию типа (glabargh) и acc.push (glabargh.age), но почему мы это делаем? – bikedres

+0

Потому что в вашей 'каждой' функции он передает текущему человеку вашу функцию (называемую обратным вызовом), тогда вы определяете ее в верхней функции' ... (человек) {... 'так что теперь человек, внутри функция, равна текущему элементу массива. –