迭代一组对象

时间:2013-10-07 12:17:28

标签: javascript arrays object

我想迭代一个对象数组,以获得最老的人和最年轻的人。我怎么能得到那个?它看起来像一个简单的任务,但我无法通过简单的每个循环来获得年龄。有什么想法吗?

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

我见过this,但这并没有帮助我理解这个问题。

5 个答案:

答案 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; }
});

最后,oldestyoungest将包含相应的对象。

答案 3 :(得分:1)

如果您只想检索最旧和最年轻的两个对象,那么最简单的方法是根据年龄以升序或降序排列sort the array,然后获取结果的第一个和最后一个元素阵列。

答案 4 :(得分:1)

使用sortmdn 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];