循环访问对象数组
Iterating over an array of objects
我想遍历一个对象数组,以便得到最年长的人和最年轻的人。我怎么能得到它?这看起来是一件容易的事,但我无法为每个循环提供简单的年龄。有什么想法吗?
var p = [
{ name : "Billy", age : 5 },
{ name : "Lucy", age : 31 },
{ name : "Jonny", age : 11 },
{ name : "Wolfgang", age : 78 },
{ name : "Robert", age : 23 }
];
我已经看到了这个,但它并没有帮助我理解这个问题。
Simple for loop
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;
}
您可以使用 for in 循环来解决此问题。您唯一需要记住的是,循环只会为您提供索引。因此,您需要访问原始对象。
一个可能的解决方案是:
var maxPerson = p[0];
for(var i in p) {
if (p[i].age > maxPerson.age)
maxPerson = p[i];
}
要在 JavaScript 中迭代数组,请使用 .forEach
.
p.forEach(function(person){
console.log(person.name + ' is ' + person.age + ' years old.');
});
请注意,IE 8 及更低版本不支持.forEach
。您可以使用 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; }
});
最后,oldest
和youngest
将包含相应的对象。
如果您只想检索两个对象,最旧的和最年轻的,那么最简单的方法是根据年龄按升序或降序对数组进行排序,然后获取结果数组的第一个和最后一个元素。
使用 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];
相关文章:
- 将数组对象传递到struts2中的操作类
- 如何使用jquery返回php-json数组对象
- 从其名称获取javascript数组对象
- 值未与数组对象绑定
- 如何按数组/对象值的倍数过滤对象数组
- 在表中显示数组对象
- 在数组对象中分组
- 将第二个或多个数组推送到数组对象 AngularJS 中
- 重新排列 JavaScript 数组/对象
- 键上的javascript数组对象过滤器
- handontable:在不更改数据数组/对象的情况下隐藏某些列
- 用于跟踪购物车可用性的Javascript数组/对象/哈希表
- 重建有角度的java脚本数组对象
- 对JSON数组对象进行排序
- 连接与数组对象相关的文本:方式和位置
- 哪些浏览器和版本支持将常见的类数组对象直接传递到fn.apply()
- 如何使用Handlebars循环数组对象和模板
- 是否可以引用JS数组/对象中的另一个元素
- Javascript中的名称索引-数组/对象
- 数组长度不等于数组对象