Add >0 pa/ip/xch to stats, add filter for starters/relievers and remove pa minimum for all hitting counting stats
This commit is contained in:
parent
6073d947b7
commit
8225fb7615
@ -4,7 +4,6 @@
|
|||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<h1 id="season-heading">Season {{ seasonNumber }} Leaders</h1>
|
<h1 id="season-heading">Season {{ seasonNumber }} Leaders</h1>
|
||||||
<h2 id="week-num">Week {{ weekNumber }}</h2>
|
<h2 id="week-num">Week {{ weekNumber }}</h2>
|
||||||
<!-- TODO this will be dynamic based on batting vs pitching -->
|
|
||||||
<h2 id="stat-heading">{{ statType }} Leaderboards - Min {{ statMinimum }}</h2>
|
<h2 id="stat-heading">{{ statType }} Leaderboards - Min {{ statMinimum }}</h2>
|
||||||
<!-- <label for="seasonNumber">Select Season</label> -->
|
<!-- <label for="seasonNumber">Select Season</label> -->
|
||||||
<select name="seasonNumber" id="seasonNumber" v-model="seasonNumber">
|
<select name="seasonNumber" id="seasonNumber" v-model="seasonNumber">
|
||||||
@ -16,6 +15,11 @@
|
|||||||
<option key="Pitching" value="Pitching">Pitching</option>
|
<option key="Pitching" value="Pitching">Pitching</option>
|
||||||
<option key="Fielding" value="Fielding">Fielding</option>
|
<option key="Fielding" value="Fielding">Fielding</option>
|
||||||
</select>
|
</select>
|
||||||
|
<select v-if="statType === 'Pitching'" name="pitchingType" id="pitchingType" v-model="pitchingType">
|
||||||
|
<option key="All" value="All">All</option>
|
||||||
|
<option key="Starters" value="Starters">Starters Only</option>
|
||||||
|
<option key="Relievers" value="Relievers">Relievers Only</option>
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row" id="stat-listing">
|
<div class="row" id="stat-listing">
|
||||||
@ -114,6 +118,7 @@ export default {
|
|||||||
currentSeasonNumber: CURRENT_SEASON,
|
currentSeasonNumber: CURRENT_SEASON,
|
||||||
seasonNumber: CURRENT_SEASON,
|
seasonNumber: CURRENT_SEASON,
|
||||||
statType: 'Batting' as 'Batting' | 'Pitching' | 'Fielding',
|
statType: 'Batting' as 'Batting' | 'Pitching' | 'Fielding',
|
||||||
|
pitchingType: 'All' as 'All' | 'Starters' | 'Relievers',
|
||||||
weekNumber: undefined! as number
|
weekNumber: undefined! as number
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -137,6 +142,8 @@ export default {
|
|||||||
return this.weekNumberForCalcs * GAMES_PER_WEEK * MIN_PLATE_APPEARANCES_PER_GAME
|
return this.weekNumberForCalcs * GAMES_PER_WEEK * MIN_PLATE_APPEARANCES_PER_GAME
|
||||||
},
|
},
|
||||||
inningsPitchedMinimum(): number {
|
inningsPitchedMinimum(): number {
|
||||||
|
if (this.pitchingType === 'Relievers') return this.weekNumberForCalcs
|
||||||
|
|
||||||
const MIN_IP_PER_GAME = 1
|
const MIN_IP_PER_GAME = 1
|
||||||
return this.weekNumberForCalcs * GAMES_PER_WEEK * MIN_IP_PER_GAME
|
return this.weekNumberForCalcs * GAMES_PER_WEEK * MIN_IP_PER_GAME
|
||||||
},
|
},
|
||||||
@ -266,11 +273,13 @@ export default {
|
|||||||
return this.getTop10FieldingStatByCategory(stat as keyof FlatFieldingStat)
|
return this.getTop10FieldingStatByCategory(stat as keyof FlatFieldingStat)
|
||||||
},
|
},
|
||||||
getTop10BattingStatByCategory(stat: keyof BattingStat): BattingStat[] {
|
getTop10BattingStatByCategory(stat: keyof BattingStat): BattingStat[] {
|
||||||
if (['sb', 'cs'].includes(stat)) {
|
const paExemptStat: (keyof BattingStat)[] = ['hr', 'rbi', 'double', 'triple', 'hit', 'gidp', 'bb', 'so', 'hbp', 'ibb', 'sb', 'cs', 'run', 'bphr', 'bpfo', 'bp1b', 'bplo', 'ab', 'pa']
|
||||||
return this.allPlayersBattingStats.concat([]).sort((a, b) => (b[stat] as number) - (a[stat] as number)).slice(0, 10)
|
|
||||||
}
|
|
||||||
// concat an empty array so that the existing array is not sorted as a side effect
|
// concat an empty array so that the existing array is not sorted as a side effect
|
||||||
return this.qualifyingBattingStats.concat([]).sort((a, b) => (b[stat] as number) - (a[stat] as number)).slice(0, 10)
|
const statBase: BattingStat[] = paExemptStat.includes(stat) ? this.allPlayersBattingStats.concat([]) : this.qualifyingBattingStats.concat([])
|
||||||
|
|
||||||
|
// concat an empty array so that the existing array is not sorted as a side effect
|
||||||
|
return statBase.sort((a, b) => (b[stat] as number) - (a[stat] as number)).slice(0, 10)
|
||||||
},
|
},
|
||||||
getTop10PitchingStatByCategory(stat: keyof PitchingStat): PitchingStat[] {
|
getTop10PitchingStatByCategory(stat: keyof PitchingStat): PitchingStat[] {
|
||||||
// qualifying IP exempt stats
|
// qualifying IP exempt stats
|
||||||
@ -278,11 +287,19 @@ export default {
|
|||||||
|
|
||||||
// concat an empty array so that the existing array is not sorted as a side effect
|
// concat an empty array so that the existing array is not sorted as a side effect
|
||||||
const statBase: PitchingStat[] = ipExemptStats.includes(stat) ? this.allPlayersPitchingStats.concat([]) : this.qualifyingPitchingStats.concat([])
|
const statBase: PitchingStat[] = ipExemptStats.includes(stat) ? this.allPlayersPitchingStats.concat([]) : this.qualifyingPitchingStats.concat([])
|
||||||
|
// filter based on pitchingType selection
|
||||||
|
const filteredStatBase: PitchingStat[] = statBase.filter(s =>
|
||||||
|
this.pitchingType === 'All'
|
||||||
|
? true
|
||||||
|
: this.pitchingType === 'Starters'
|
||||||
|
? s.gs > 0
|
||||||
|
: s.gs === 0
|
||||||
|
)
|
||||||
|
|
||||||
const reverseSortStats = ['era', 'whip', 'bbPer9']
|
const reverseSortStats = ['era', 'whip', 'bbPer9']
|
||||||
const sortMultiplier = reverseSortStats.includes(stat) ? -1 : 1
|
const sortMultiplier = reverseSortStats.includes(stat) ? -1 : 1
|
||||||
|
|
||||||
return statBase.sort((a, b) => sortMultiplier * ((b[stat] as number) - (a[stat] as number))).slice(0, 10)
|
return filteredStatBase.sort((a, b) => sortMultiplier * ((b[stat] as number) - (a[stat] as number))).slice(0, 10)
|
||||||
},
|
},
|
||||||
getTop10FieldingStatByCategory(stat: keyof FlatFieldingStat): FlatFieldingStat[] {
|
getTop10FieldingStatByCategory(stat: keyof FlatFieldingStat): FlatFieldingStat[] {
|
||||||
// High: 2B/SS - 2 XCh/wk
|
// High: 2B/SS - 2 XCh/wk
|
||||||
@ -340,15 +357,18 @@ export default {
|
|||||||
.map(stat => {
|
.map(stat => {
|
||||||
return { ...stat, team: this.teamsById.get(stat.player.team as unknown as number) ?? stat.team }
|
return { ...stat, team: this.teamsById.get(stat.player.team as unknown as number) ?? stat.team }
|
||||||
})
|
})
|
||||||
|
.filter(stat => stat.pa > 0)
|
||||||
}
|
}
|
||||||
if (this.statType == 'Pitching') {
|
if (this.statType == 'Pitching') {
|
||||||
this.allPlayersPitchingStats = (await fetchPitchingStatsBySeason(this.seasonNumber, true))
|
this.allPlayersPitchingStats = (await fetchPitchingStatsBySeason(this.seasonNumber, true))
|
||||||
.map(stat => {
|
.map(stat => {
|
||||||
return { ...stat, team: this.teamsById.get(stat.player.team as unknown as number) ?? stat.team }
|
return { ...stat, team: this.teamsById.get(stat.player.team as unknown as number) ?? stat.team }
|
||||||
})
|
})
|
||||||
|
.filter(stat => stat.ip > 0)
|
||||||
}
|
}
|
||||||
if (this.statType == 'Fielding') {
|
if (this.statType == 'Fielding') {
|
||||||
const allPlayerPositionFieldingStats: FieldingStat[] = await fetchFieldingStatsBySeason(this.seasonNumber, true)
|
const allPlayerPositionFieldingStats: FieldingStat[] = (await fetchFieldingStatsBySeason(this.seasonNumber, true))
|
||||||
|
.filter(stat => stat.xCheckCount > 0 || stat.stolenBaseCheckCount > 0 || stat.passedBallCount > 0)
|
||||||
const aggregatedFieldingStatsByPlayer: { [playerName: string]: FlatFieldingStat } = {}
|
const aggregatedFieldingStatsByPlayer: { [playerName: string]: FlatFieldingStat } = {}
|
||||||
|
|
||||||
allPlayerPositionFieldingStats.forEach(stat => {
|
allPlayerPositionFieldingStats.forEach(stat => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user