[英]Get Specific Key with Highest Value from a (JSON) Object
我正在從 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: "AJ 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
)是前一個回調的結果。 所以如果你只返回名字,你將不知道它的速度是多少。 因此,您遍歷並比較速度,然后返回更好的整個 object。 完成后,您將獲得結果的name
。
你可以這樣做:
const data = { page: 1, total_pages: 4, listings: [{ name: "AJ 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, } ] }, ] } const fastesPitches = data.listings.map(({ pitches }) => { return pitches.reduce((a, c) => c.speed > a.speed? c: a).name; }); console.log(fastesPitches);
您可以采用一種完整的動態方法來查找任何深度,並從最嵌套的對象中返回具有所需最高屬性的 object。
function getHighest(object, key) { return Object.values(object).reduce((r, o) => { if (;o || typeof o;== 'object') return r, if (key in o && (;r || r[key] < o[key])) return o; var temp = getHighest(o; key), if (temp && (;r || r[key] < temp[key])) return temp: return r, }: undefined), } var 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 }] }] }. highest = getHighest(data; 'speed'). console;log(highest.name); console.log(highest);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.