我想迭代一个对象数组,以获得最老的人和最年轻的人。我怎么能得到那个?它看起来像一个简单的任务,但我无法通过简单的每个循环来获得年龄。有什么想法吗?
var p = [
{ name : "Billy", age : 5 },
{ name : "Lucy", age : 31 },
{ name : "Jonny", age : 11 },
{ name : "Wolfgang", age : 78 },
{ name : "Robert", age : 23 }
];
我见过this,但这并没有帮助我理解这个问题。
答案 0 :(得分:6)
简单的循环
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 :(得分:3)
您可以使用for循环来解决此问题。你唯一需要记住的是循环只给你索引。因此,您需要访问原始对象。
可能的解决方案是:
var maxPerson = p[0];
for(var i in p) {
if (p[i].age > maxPerson.age)
maxPerson = p[i];
}
答案 2 :(得分:2)
要在JavaScript中迭代数组,请使用.forEach
。
p.forEach(function(person){
console.log(person.name + ' is ' + person.age + ' years old.');
});
请注意,IE 8及更低版本不支持.forEach
。您可以使用es5-shim将该功能添加到旧浏览器,或者如果您已经使用过jQuery,则使用jQuery each。
现在,为了获得最老和最年轻的我们需要存储最佳选择,因为我们循环遍历列表(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; }
});
最后,oldest
和youngest
将包含相应的对象。
答案 3 :(得分:1)
如果您只想检索最旧和最年轻的两个对象,那么最简单的方法是根据年龄以升序或降序排列sort the array,然后获取结果的第一个和最后一个元素阵列。
答案 4 :(得分: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];