javascript - 从(JSON)对象中获取具有最高值的特定键
问题描述
我正在从 API 响应中获取数据,并尝试以最快的速度获取音高的名称。这是 API 响应的示例。
{
page: 1,
total_pages: 4,
listings: [
{
name: "A.J. Burnett",
pitches: [
{
name: "4 Seam FB",
speed: 96,
control: 84,
},
{
name: "Knuckle Curve",
speed: 79,
control: 74,
},
{
name: "Sinker",
speed: 95,
control: 64,
},
{
name: "Changeup",
speed: 81,
control: 44,
}
]
},
{
name: "Joe Smitch",
pitches: [
{
name: "4 Seam FB",
speed: 91,
control: 82,
},
{
name: "Changeup",
speed: 69,
control: 44,
}
]
},
]
}
这是我尝试过的:
itemSet.forEach( (item) => {
let fastestPitch = Object.keys(item.pitches).reduce((a, b) => {
item.pitches[a] > item.pitches[b] ? item.pitches[a].name : item.pitches[b].name
});
});
但是,这总是返回数组中最后一个音高的名称。我正在尝试以最快的速度返回球场。
编辑:我也尝试了以下方法,但它返回错误。
itemSet.forEach( (item) => {
let fastestPitch = Object.keys(item.pitches).reduce((a, b) => {
item.pitches[a].speed > item.pitches[b].speed ? item.pitches[a].name : item.pitches[b].name
});
});
错误:
(node:80698) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'speed' of undefined
解决方案
要提取每个中最快的,您可以像这样Array#map
输入每个条目listings
,然后Array#reduce
输入它们的条目pitches
:
let data = { page: 1, total_pages: 4, listings: [{ name: "A.J. Burnett", pitches: [{ name: "4 Seam FB", speed: 96, control: 84, }, { name: "Knuckle Curve", speed: 79, control: 74, }, { name: "Sinker", speed: 95, control: 64, }, { name: "Changeup", speed: 81, control: 44, } ] }, { name: "Joe Smitch", pitches: [{ name: "4 Seam FB", speed: 91, control: 82, }, { name: "Changeup", speed: 69, control: 44, } ] }, ] };
let fastestPitches = data.listings.map(obj => {
return obj.pitches.reduce((best, current) => {
return best.speed > current.speed ? best : current
}, {}).name
});
console.log(fastestPitches)
请注意,当您减少时,第一个参数 ( best
,在这种情况下) 是前一个回调的结果。所以如果你只返回名字,你将不知道它的速度是多少。因此,您遍历并比较速度,然后返回更好的整个对象。完成后,您将获得name
结果。
推荐阅读
- android - 如何使用 JSON API 在 recyclerview 滚动上加载更多数据
- javascript - App Lab 的 readRecords() 更改元素的 ID
- python - NumPy:根据另一个掩码屏蔽数组
- tensorflow - 我的验证损失低于我的训练损失,我应该摆脱正则化吗?
- asp.net-core-2.0 - 在 ASP.NET Core 2.2 应用程序中安装 Microsoft Extensions 包 3.1
- android - 如何检查变量值是否在 Kotlin 的其他线程中更改?
- python - 如果不同的列满足熊猫中的条件,如何从组中删除所有行
- vue.js - Vue.js:如何使转换组只触发一次?
- elasticsearch - 只能在关键字、文本和通配符字段上使用通配符查询 - 而不是在类型为 [long] 的 [id] 上使用
- git - 在 gitlabci.yaml 中使用“git push”时出错