提问人:Johnny John Boy 提问时间:11/16/2023 更新时间:11/16/2023 访问量:49
当 Javascript 对象中有多个时,如何找到第一个最高数字?
How to find the first highest number when there are more than one in a Javascript Object?
问:
我有一个对象数组,我想找到键“保存”的最高值。我用过这个:
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 的新手。
答:
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 个或更多元素(对于本例)将仅返回第一个 ocurrencemaxObject
currentObject
maxObject
saving: 500
maxSavingObject
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.saving
prev.saving
maxSaving = tableResults.reduce((prev, current)=> current.saving > prev.saving ? current : prev)
评论