计算多维数组中具有最高值属性的对象

时间:2016-12-31 14:36:40

标签: javascript arrays multidimensional-array

我有一个多层数组,我想在其中计算包含特定属性的最高值的对象。

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) )

但我想要整个对象。

任何帮助表示感谢。

2 个答案:

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