我有一个多层数组,我想在其中计算包含特定属性的最高值的对象。
let arr = [{
id: 1,
card: {
firstName: 'John',
lastName: 'Smith',
info: {
age: 36,
height: 152
}
}
}, {
id: 2,
card: {
firstName: 'Dan',
lastName: 'Hislop',
info: {
age: 38,
height: 155
}
}
}, {
id: 3,
card: {
firstName: 'Mary',
lastName: 'Walter',
info: {
age: 29,
height: 122
}
}
}]
我希望能够计算该数组中包含最高age
值的顶级对象,并返回该对象。
我现在能做的最好的事情就是找到最高值并单独返回该值:
let oldest = Math.max.apply(Math, arr.map(obj =>
obj.card.info.age) )
但我想要整个对象。
任何帮助表示感谢。
答案 0 :(得分:1)
这是reduce的一个案例:
arr.reduce((prev, curr) => prev.card.info.age < curr.card.info.age ? curr : prev)
没有什么神奇之处,我们只是一次看两个物体,继续使用年龄较大的物体。
答案 1 :(得分:1)
一个好的for for循环对我来说很完美:
var i, xs, max;
xs = [{value:3},{value:1},{value:4},{value:2}];
for (i = 0; i < xs.length; i++) {
if (i == 0 || xs[i].value > xs[max].value) {
max = i;
}
}
console.log(xs[max]);