从数组中的对象和 return 键值对中查找最大整数

Find largest integer from objects within array and return a key value pair

我正在尝试编写一个将对象数组作为参数的函数,如下所示: function getOldest([{name:john, age:69}, {name:jane, age:28}, {name:paul, age: 19}])

该函数将检查对象的年龄 属性 并找到最大值,然后 return 名称 属性。

getOldest([{name: john, age: 35}, {name: jane, age: 20}, {...}])
returns "john"

此外,如果两个键值对共享相同的值,例如两个人的年龄相同,它将 return 一个数组代替。

getOldest([{name: john, age: 20}, {name: jane, age: 20}, {...}])
returns ['john', 'jane']

我已经花了大约五个小时来想办法解决这个问题,但就是想不通。

我总是return一个数组来保持一致性:

 function getOldest(arr){
   const old = arr.reduce((acc, {age}) => Math.max(acc, age), 0);
   return arr.filter(({age}) => age === old);
 }

首先它通过 reduce 遍历数组并找到最老的年龄,然后它 returns 过滤的数组。


如果要一步减少:

 function getOldest(arr){
   var old = 0;
   return arr.reduce((arr, {name, age}) => {
     if(age > old){
       old = age;
       return [name];
     }
     if(age === old) return arr.concat(name);
     return arr;
  }, []);
 }

使用sort,然后filter,最后map

var arr = [{name:"john", age:69}, {name:"jane", age:28}, {name:"paul", age: 19}];
arr.sort( ( a, b ) => b.age - b.age ); //sort by age in reverse
var maxAge = arr[ 0 ].age; //find max age
var output  = arr.filter( a => a.age == maxAge ).map( a => a.name ); //returns array of max age name

演示

var arr = [{
  name: "john",
  age: 69
}, {
  name: "jane",
  age: 28
}, {
  name: "paul",
  age: 19
}];
arr.sort((a, b) => b.age - b.age); //sort by age in reverse
var maxAge = arr[0].age; //find max age
var output = arr.filter(a => a.age == maxAge).map(a => a.name); //returns array of max age name
console.log(output);

首先使用map

找到maxAge
var arr = [{name:"john", age:69}, {name:"jane", age:28}, {name:"paul", age: 19}];
var maxAge = Math.max.apply( null, arr.map( a => a.age ) );
var output  = arr.filter( a => a.age == maxAge ).map( a => a.name ); //returns array of max age name

演示

var arr = [{name:"john", age:69}, {name:"jane", age:28}, {name:"paul", age: 19}];
var maxAge = Math.max.apply( null, arr.map( a => a.age ) );
var output  = arr.filter( a => a.age == maxAge ).map( a => a.name ); //returns array of max age name
console.log( output );

 function getOldest(arr){

    return arr.reduce( function(acc,current){
       if (acc.age > current.age) {
          return acc
       } else { return current}
    }).name

 }

编辑:它实际上是这里最好的方法,只是一个 reduce 而已,没有排序或过滤。

既然已经有了答案……我觉得reduce就够了。另外,我认为最好总是 return 一个数组。根据某些随机标准 return 不同类型的函数不友好:

function getOldest(data) {
  var max = -Infinity;
  return data.reduce((acc, obj) => {
    obj.age > max? (acc = [obj.name]) && (max = obj.age) :
    obj.age == max? acc.push(obj.name): null;
    return acc;
  },[]);
}

var data = [{name: 'paul', age: 19}, 
            {name: 'john', age: 69},
            {name: 'jane', age: 28},
            {name: 'fred', age: 13},
            {name: 'tom' , age: 69}];

console.log(getOldest(data));

var myarray = [{name: 'john', age: 35}, {name: 'jane', age: 20}];
var oldest = getoldest(myarray);
alert(oldest.name);

在函数中你可以做这样的事情

function getoldest(myarray){
 var oldest = Math.max.apply(Math,myarray.map(function(myarray){return myarray.age;}));
 var obj = myarray.find(function(o){return o.age == oldest;});
 return obj;
};

这样您就可以将返回的对象用于其他用途。