【问题标题】:Take an object from an array of objects based on the max value on one of its properties根据其中一个属性的最大值从对象数组中获取一个对象
【发布时间】:2021-11-07 01:34:08
【问题描述】:

假设我有一个这样的对象数组

const arr = [
  {name: 'John', age: 15},
  {name: 'Max', age: 17},
  {name: 'Tom', age: 11},
]

我怎样才能只取包含 Max, 17 的对象? 结果是这样的

b = [{ name: Max, age: 17 }]

或更好

c = { name: Max, age: 17 }

【问题讨论】:

  • 你有什么尝试吗?您可以按年龄排序并获得第一个。您可以循环并跟踪最高值并返回索引。查找排序函数。

标签: javascript arrays sorting object filter


【解决方案1】:

将数组归约为age最高的对象:

const arr = [{"name":"John","age":15},{"name":"Max","age":17},{"name":"Tom","age":11}]

const result = arr.reduce((acc, o) => !acc || o.age > acc.age ? o : acc, null)

console.log(result)

我使用null 作为Array.reduce() 的默认值,以防止数组为空时出错。但是,您也可以事先检查一个空数组:

const findMaxAge = arr => arr.length 
  ? arr.reduce((acc, o) => o.age > acc.age ? o : acc)
  : null

const arr = [{"name":"John","age":15},{"name":"Max","age":17},{"name":"Tom","age":11}]

console.log(findMaxAge(arr))

console.log(findMaxAge([]))

【讨论】:

  • 不错的一个班轮!
  • 非常优雅的解决方案。
【解决方案2】:

您可以先按年龄排序,然后年龄值最高的对象将位于列表的开头:

const a = [
  {name: "John", age: 15},
  {name: "Max", age: 17},
  {name: "Tom", age: 11},
]

const sortedByAge = a.sort((a,b) => b.age - a.age);

const highestAge = sortedByAge[0];

console.log(highestAge);

【讨论】:

    【解决方案3】:

    希望此代码对您有所帮助

    const a = [{name: 'John', age: 15},
           {name: 'Max', age: 17},
           {name: 'Tom', age: 11},];
    const result = a.reduce((p, c) => p.age > c.age ? p : c);
    console.log(result);
    

    【讨论】:

      【解决方案4】:

      使用Array.prototype.reduce() 是一种干净的方式。 此函数逐个遍历数组,在每一步将当前数组值添加到上一步的结果中。在我们的例子中,将前一个最大元素与当前元素进行比较。返回值将是包含年龄键最大值的对象。

      const arr = [
             {name: 'John', age: 15},
             {name: 'Max', age: 17},
             {name: 'Tom', age: 11},
          ]
          
      const largest = arr.reduce((prev, current) => (prev.age > current.age) ? prev : current)
      
      console.log(largest);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-12
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        • 2020-09-17
        • 2016-04-20
        • 2018-06-18
        • 2020-10-15
        相关资源
        最近更新 更多