如何在JavaScript对象数组中获取首个最高saving值的对象?
如何找到数组中'saving'值最高的第一个对象?
我有一个对象数组,想要找到键为'saving'的最高值对应的对象。最开始用了这段代码:
maxSaving = tableResults.reduce((prev, current)=> ( (prev.saving > current.saving) ? prev : current),0)
这段代码能返回最高值对应的对象,但有个问题:当存在多个相同的最高值时,它总是返回最后一个实例,而我需要第一个实例。我尝试修改代码但没效果:
maxSaving = tableResults.reduce((prev, current)=> ( (prev.saving > current.saving && prev.saving != current.saving) ? prev : current),0)
解决方法
核心问题是原来的逻辑在saving值相等时会替换成当前对象,导致最后一个相等值被保留。只需调整判断逻辑,仅当当前对象的saving严格大于之前的最大值时才替换,相等时保留之前的对象即可。另外建议把初始值换成数组的第一个元素,避免初始值为0可能带来的类型问题(比如0没有saving属性,若数组中saving为负数会出错)。
修改后的代码:
maxSaving = tableResults.reduce((prev, current) => { return current.saving > prev.saving ? current : prev; }, tableResults[0]);
原错误代码分析
你修改后的条件prev.saving > current.saving && prev.saving != current.saving其实和prev.saving > current.saving完全等价——当prev.saving大于current.saving时,两者自然不相等,所以逻辑没有变化,还是会在值相等时替换成当前对象,因此无法解决问题。
内容的提问来源于stack exchange,提问作者Johnny John Boy
相关产品推荐
相关产品推荐

