2016-10-04 1 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; 
} 

이 함수가 반환 [34 26] : 내가 "내가 정의되지 않은"오류를 받고 있어요

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

. 각 숫자를 참조하기 위해 i를 사용할 수 없다면 어떻게 그 나이를 새로운 배열로 밀어 넣을 수 있습니까?

+0

FUNC (배열 [I]); <- 배열 요소가 이미 있으므로 acc.push (people [i] .age)를 acc.push (age.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; 
} 

당신의 each 함수가 무엇을 수행하는 기본 forEach 기능을 가지고 있으며, 아마 더 빨리/더 강력 자바 스크립트 방식에 의해.

가 이와 같은 배열에 사용되는 그래서 Array의 프로토 타입이다 :

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

감사합니다. 함수 (age), acc.push (age.age) 또는 함수 (glabargh)와 acc.push (glabargh.age)와 같은 다른 단어를 사용하면 어떻게 작동하는지 알 수 있습니다.하지만 왜이 작업을 수행합니까? – bikedres

+0

'each' 함수는 현재 사람의 함수 (콜백)에 피드를하기 때문에 맨 위에 정의합니다. ... function (person) {... 그래서 이제 사람, 함수는 현재 배열 항목과 같습니다. –

관련 문제