在Javascript中如何找到一个对象数组中某个属性的最大值和最小值?

9

I have the following javascript object:

Person1.Name = "John";
Person1.Age = 12;

Person2.Name = "Joe";
Person2.Age = 5;

我有一个人的数组,如何根据年龄查找最小/最大值?
任何JavaScript或Jquery的解决方案都可以接受。
非常感谢您的帮助。

你尝试过什么?(http://whathaveyoutried.com) - Anthony Grist
可能是重复的问题:从元素数组中获取jQuery min/max属性 - Andrzej Doyle
可能是比较JavaScript对象数组以获取最小/最大值的重复问题。 - Felix Kling
@AnthonyGrist - 我尝试手动迭代并查找Min/Max,但是Kooilnc的解决方案才是我想要的优雅解决方案。 :-) - MaYaN
2个回答

24

假设你的数组长这样:

var persons = [{Name:"John",Age:12},{Name:"Joe",Age:5}];

然后您可以:

var min = Math.min.apply(null, persons.map(function(a){return a.Age;}))
   ,max = Math.max.apply(null, persons.map(function(a){return a.Age;}))

[编辑] 添加了ES2015方法:

const minmax = (someArrayOfObjects, someKey) => {
  const values = someArrayOfObjects.map( value => value[someKey] );
  return {
      min: Math.min.apply(null, values), 
      max: Math.max.apply(null, values)
    };
};

console.log(
  minmax( 
    [ {Name: "John", Age: 12},
      {Name: "Joe", Age: 5},
      {Name: "Mary", Age: 3},
      {Name: "James sr", Age: 93},
      {Name: "Anne", Age: 33} ], 
    'Age') 
);


1

首先,您需要使用自定义排序函数对数组进行排序:

var sorted = persons.sort(function(a, b) {
  if(a.Age > b.Age) return 1;
  else if(a.Age < b.Age) return -1;
  else return 0;
});

然后你可以只取第一个和最后一个:

var min = sorted[0],
    max = sorted[sorted.length - 1];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接