如何在JavaScript中查找JSON对象数组指定属性的最大/最小值
JavaScript获取对象数组指定属性最值的实现方案
以下是不同场景下的最优实现:
- 简洁写法(适合小数组,代码量最低)
直接使用Math.min/Math.max结合扩展运算符和Array.map即可实现,符合你想要的极简调用习惯:
取最小值示例:
取最大值示例:const minTime = Math.min(...arr.map(item => item.time)) // 返回56
注意:该方案会先遍历数组生成所有属性值的新数组,且扩展运算符存在参数长度上限,数组长度超过10万时不推荐使用。const maxTime = Math.max(...arr.map(item => item.time)) // 返回65 - 性能最优写法(全场景兼容,适合生产环境)
单次遍历数组维护最值,没有额外性能损耗,可封装为通用函数直接调用:
调用示例:// 通用最值获取函数 function getExtreme(arr, prop, isMax = false) { if (!arr.length) return undefined let result = arr[0][prop] for (let i = 1; i < arr.length; i++) { const current = arr[i][prop] result = isMax ? Math.max(result, current) : Math.min(result, current) } return result }
该方案仅遍历数组一次,无额外内存开销,也不存在参数溢出问题,超大数组场景下性能远优于简洁写法。getExtreme(arr, 'time') // 取time最小值,返回56 getExtreme(arr, 'time', true) // 取time最大值,返回65 - reduce实现(兼顾性能与代码简洁度)
基于Array.reduce的单次遍历实现,写法精简同时没有参数上限问题:
取最小值示例:
取最大值示例:const minTime = arr.reduce((prev, curr) => Math.min(prev, curr.time), arr[0]?.time)
若需要兼容空数组场景,取最小值时初始值可替换为const maxTime = arr.reduce((prev, curr) => Math.max(prev, curr.time), arr[0]?.time)Infinity,取最大值时初始值替换为-Infinity即可。
内容的提问来源于stack exchange,提问作者aloea
相关产品推荐
相关产品推荐

