2

最年長者と最年少者を取得するために、オブジェクトの配列を反復処理したいと考えています。どうすればそれを手に入れることができますか?簡単な作業のように見えますが、単純な for each ループで年齢を取得する方法はありません。何か案は?

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

これを見たことがありますが、問題を理解するのに役立ちませんでした。

4

5 に答える 5

3

for in ループを使用してこれを解決できます。覚えておく必要があるのは、ループがインデックスのみを提供することだけです。したがって、元のオブジェクトにアクセスする必要があります。

考えられる解決策は次のとおりです。

var maxPerson = p[0];

for(var i in p) {
    if (p[i].age > maxPerson.age)
        maxPerson = p[i];
}
于 2013-10-07T12:25:28.540 に答える
2

JavaScript で配列を反復するには、 を使用します.forEach

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

.forEachIE 8 以下ではサポートされていないことに注意してください。es5-shimを使用してその機能を古いブラウザーに追加するか、とにかく jQuery を既に使用している場合はそれぞれ jQueryを使用できます。

ここで、最も古いものと最も若いものを取得するには、リストをループする際に最適な選択肢を保存する必要があります ( jsFiddle ):

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適切なオブジェクトが含まれます。

于 2013-10-07T12:19:06.277 に答える
1

sort( mdn doc ) を使用すると、すべてのブラウザーで機能します。

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];
于 2013-10-07T12:30:12.663 に答える