2013-10-07 6 views
2

가장 오래된 사람과 가장 어린 사람을 얻기 위해 객체의 배열을 반복하고 싶습니다. 나는 어떻게 그것을 얻을 수 있 었는가? 쉬운 작업처럼 보이지만 각 루프에 대해 간단하게 나이를 얻을 수있는 방법은 없습니다. 어떤 아이디어?객체 배열 반복하기

var p = [ 
    { name : "Billy", age : 5 }, 
    { name : "Lucy", age : 31 }, 
    { name : "Jonny", age : 11 }, 
    { name : "Wolfgang", age : 78 }, 
    { name : "Robert", age : 23 } 
]; 

나는 this을 보았다하지만 문제를 이해하는 나에게 도움이되지 않았다.

+1

(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for [사용을, 루크에 대한]). –

+0

두 포인터 MIN 및 MAX가 있는지 확인하십시오. 루프의 각 비교에서이 값을 현재 값과 비교합니다. 루프가 끝날 때까지 필요한 값을 둘 다 갖게됩니다. –

답변

6

간단한은이 문제를 해결합니다. 루프가 인덱스 만 제공한다는 것을 기억해야합니다. 따라서 원본 개체에 액세스해야합니다.

가능한 솔루션입니다 : sort (mdn doc)가 모든 브라우저에서 작동합니다 사용

var maxPerson = p[0]; 

for(var i in p) { 
    if (p[i].age > maxPerson.age) 
     maxPerson = p[i]; 
} 
+1

만약 'p [0] .age'에 'high'를 설정하고'p [0] .age'에'low'를 설정 한 다음 루프의 시작에서'i'를 1로 설정하면 확인하는 것에 대해 걱정할 필요가 없습니다. 'low'가'null'입니다. – h2ooooooo

+0

@tymeJV, jsfiddle 같은 작동 예제를 보여줄 수 있습니까? 나를 위해 작동하지 않습니다 –

+0

@KananFarzali [잘 작동합니다] (http://jsfiddle.net/vCTFU/). – h2ooooooo

1

JavaScript에서 배열을 반복하려면 .forEach을 사용합니다.

p.forEach(function(person){ 
    console.log(person.name + ' is ' + person.age + ' years old.'); 
}); 

IE8 이하에서는 .forEach가 지원되지 않습니다. es5-shim을 사용하여 이전 브라우저에 해당 기능을 추가하거나 이미 jQuery를 사용하는 경우 jQuery each을 사용할 수 있습니다. 결국

var oldest = p[0]; 
var youngest = p[0]; 
p.forEach(function(person){ 
    if (oldest.age < person.age) { oldest = person; } 
    if (person.age < youngest.age) { youngest = person; } 
}); 

, oldestyoungest 해당 개체를 포함합니다 :

지금 가장 오래되고 우리가 목록을 통해 우리 루프 ( jsFiddle)으로 최고의 선택을 저장할 필요가 막내 얻을 수 있습니다.

+0

전체 초보자를 위해 간단하고 호환 가능한 for 루프가 더 좋습니다. –

+0

@dystroy, 나는 동의하지 않는다. 왜 그렇게 생각하는지 분명히하고 싶습니까? – Denis

+0

@Denis 기본 흐름 제어 구조는 고급 기능을 탐구하기 전에 모든 프로그래머가 갖추어야 할 기본 지식 (특히 호환성 및 심의에 대한 걱정을 의미 할 때)이 무엇인지 의미합니다. –

1

가장 오래된 개체와 가장 어린 개체 중 두 개체 만 검색하려는 경우 가장 쉬운 방법은 sort the array의 나이를 기준으로 오름차순 또는 내림차순으로 정렬 한 다음 결과 배열의 첫 번째 요소와 마지막 요소를 가져 오는 것입니다. 당신은 루프에 대한 사용할 수 있습니다 루프

var high = 0, 
    low; 

//Start at 0 index, iterate until the array length, iterate by 1 
for (var i = 0; i < p.length; i++) { 
    //checking high 
    if (p[i].age > high) 
     high = p[i].age; 

    //checking low 
    if (p[i].age < low || low == null) 
     low = p[i].age; 
} 
1

:

p.sort(function (a, b) { 
    return a.age - b.age; 
}); 

var youngest = p[0]; 
var oldest = p[p.length - 1]; 

하는 것은주의해야하지만, sort는 원래 배열을 수정합니다. 당신은이 문제를 우회하기 위해이를 복제 할 수 있습니다

var clone = [].concat(p).sort(/* compare function */); 
var youngest = clone[0]; 
var oldest = clone[clone.length - 1];