当 Javascript 对象中有多个时,如何找到第一个最高数字?

How to find the first highest number when there are more than one in a Javascript Object?

提问人:Johnny John Boy 提问时间:11/16/2023 更新时间:11/16/2023 访问量:49

问:

我有一个对象数组,我想找到键“保存”的最高值。我用过这个:

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) 

我真的想不通,我是使用 reduce 的新手。

JavaScript Arrays 对象

评论


答:

0赞 Chris G 11/16/2023 #1

我假设你的数组有点像这样。

  • 使用 reduce 查找保存键中的最大数字
  • 从第一个对象作为初始最大值开始。

在此代码中,如果有 2 个具有相同最大值的元素,则代码将仅返回第一个匹配项,因为仅当当前值较高时才会更新 valuemaxObject

//this is just a sample array
const results = [
  { saving: 100, index: 0 },
  { saving: 200, index: 1 },
  { saving: 500, index: 2 },
  { saving: 150, index: 3 },
  { saving: 300, index: 4 },
  { saving: 500, index: 5 },
];

const maxSavingObject = results.reduce((maxObject, currentObject) => {
  return currentObject.saving > maxObject.saving ? currentObject : maxObject;
}, results[0]); 


console.log('Object with the highest saving:', maxSavingObject);

评论

0赞 trincot 11/16/2023
你可以解释一下他们(第一个)代码的本质区别是什么:你的答案集中在使用 ,但他们已经这样做了。不过,还有另一个因素会有所不同。reduce
0赞 Chris G 11/16/2023
是的,这是因为只有当 的保存值高于 所以,如果您发现 2 个或更多元素(对于本例)将仅返回第一个 ocurrencemaxObjectcurrentObjectmaxObjectsaving: 500maxSavingObject
0赞 trincot 11/16/2023 #2

在这种情况下,您不应将初始值作为第二个参数提供给 。此外,对于这样的初始值,值 0 是错误的,因为累加器被假定为一个对象,而不是一个整数。reduce

除此之外,你应该改成,你就完成了。>>=

tableResults.reduce((prev, current) => prev.saving >= current.saving ? prev : current) 
1赞 PeterKA 11/16/2023 #3

诀窍是仅在大于时进行更改 - 这应该可以防止用第二个匹配替换第一个匹配项,依此类推。所以像这样的东西应该这样做:current.savingprev.saving

maxSaving = tableResults.reduce((prev, current)=> current.saving > prev.saving ? current : prev)