基于某个字段从数组找出最大的对象

如果是原始值数组,比如数字数组找最大值,可直接通过 Math.max(…array) 完成。

如果是对象数组,基于对象某个字段找出值最大的对象,可通过 Array.prototype.reduce 来其妙完成。

考察如下测试数据:

var data = [
  {
    name: "john",
    age: 1,
  },
  {
    name: "david",
    age: 2,
  },
  {
    name: "micky",
    age: 9,
  },
  {
    name: "tommy",
    age: 3,
  },
];

利用数组 reduce 方法可这样来操作:

/**
 * 从对象数组中找出字段 `key` 值最大的并返回该对象
 * @param items
 * @param key
 * @returns
 */
function findMaxObject(items: IItem[], key: string) {
  return items.reduce((prev, current) =>
    prev[key] > current[key] ? prev : current
  );
}

原理则从第一个开始,逐个往后做比较,返回大的那个,直到进行到数组最后一个元素。

测试:

console.log(findMaxObject(data)) // { name: 'micky', age: 9 }

相关资源