I have a list with races, and the purses are in Euros and in GBP, and I need to order by purse considering the currency. Example: GBP19.000 comes firsts, and EUR19.000 comes second, because GB is more valuable than EUR.
That's my Json
vm.races = [
{id:1, country: 'United Kingdom', flag: 'flag-gb', cities:[{name:'Fontwell', race_type:'J', start_time: '09:55', purse:'26.000', currency: 'GBP'}, {name:'Hereford', race_type:'J', start_time: '5m', purse:'35.000', currency: 'EUR'}, {name:'Wolverhampton',race_type:'G', start_time: '10:50', purse:'32.000', currency: 'EUR'}]},
{id:2, country: 'South Africa', flag: 'flag-za', cities:[{name:'Flamingo Park', race_type:'G', start_time: '10:35', purse:'10.000', currency: 'EUR'}]},
{id:3, country: 'France', flag: 'flag-fr', cities:[{name:'Melton PMU', race_type:'T', start_time: '11:15', purse:'25.000', currency: 'EUR'}, {name:'Pau', race_type:'J', start_time: '08:50', purse:'33.000', currency: 'EUR'}, {name:'Vincennes', race_type:'T', start_time: 'Due', purse:'29.000', currency: 'EUR'}, {name:'Marseilles', race_type:'G', start_time: '09:20', purse:'38.000', currency: 'EUR'}, {name:'Toulouse', race_type:'T', start_time: '09:00', purse:'35.000', currency: 'EUR'}]},
{id:4, country: 'Sweden', flag: 'flag-se', cities:[{name:'Gävle', race_type:'T', start_time: '10:45', purse:'22.000', currency: 'EUR'}, {name:'Axevalla', race_type:'T', start_time: 'Due', purse:'37.000', currency: 'EUR'}]},
{id:5, country: 'Norway', flag: 'flag-no', cities:[,{name:'Leangen', race_type:'T', start_time: '09:05', purse:'12.000', currency: 'EUR'}, {name:'Leangen', race_type:'T', start_time: '09:05', purse:'12.000', currency: 'GBP'}]},
{id:6, country: 'Australia', flag: 'flag-au', cities:[{name:'Melton', race_type:'T', start_time: '10:15', purse:'42.600', currency: 'EUR'}]},
{id:7, country: 'Brazil', flag: 'flag-br', cities:[{name:'Blumenau', race_type:'D', start_time: '11:40', purse:'15.000', currency: 'EUR'}]}
]
That's my HTML:
<li class="list-group-item" ng-repeat="city in race.cities | orderBy: '-realPurse' | filter: vm.filter">
That's my JS
function realPurse(item) {
let realPurse;
if (item.currency === 'EUR') {
realPurse = (item.purse / 1.13);
item.realPurse = realPurse;
} else{
realPurse = item.purse;
item.realPurse = realPurse;
}
return item.realPurse;
}
This sorts the cities by converted purse, then sorts the races by the top city.
races.map((race) => {
race.cities = race.cities.sort((a, b) => {
a = a.currency === 'EUR' ? a.purse : a.purse * 1.13
b = b.currency === 'EUR' ? b.purse : b.purse * 1.13
return b - a
})
return race
})
.sort((a, b) => {
a = a.cities[0].currency === 'EUR' ? a.cities[0].purse : a.cities[0].purse * 1.13
b = b.cities[0].currency === 'EUR' ? b.cities[0].purse : b.cities[0].purse * 1.13
return b - a
})
The result I get is this:
{id: 6, country: "Australia", flag: "flag-au", cities: Array}
{id: 3, country: "France", flag: "flag-fr", cities: Array}
{id: 4, country: "Sweden", flag: "flag-se", cities: Array}
{id: 1, country: "United Kingdom", flag: "flag-gb", cities: Array}
{id: 7, country: "Brazil", flag: "flag-br", cities: Array}
{id: 5, country: "Norway", flag: "flag-no", cities: Array}
{id: 2, country: "South Africa", flag: "flag-za", cities: Array}
Some cities sorted:
// Race 3, France
{name: "Marseilles", race_type: "G", start_time: "09:20", purse: "38.000", currency: "EUR"}
{name: "Toulouse", race_type: "T", start_time: "09:00", purse: "35.000", currency: "EUR"}
{name: "Pau", race_type: "J", start_time: "08:50", purse: "33.000", currency: "EUR"}
{name: "Vincennes", race_type: "T", start_time: "Due", purse: "29.000", currency: "EUR"}
{name: "Melton PMU", race_type: "T", start_time: "11:15", purse: "25.000", currency: "EUR"}
// Race 5, Norway
{name: "Leangen", race_type: "T", start_time: "09:05", purse: "12.000", currency: "GBP"}
{name: "Leangen", race_type: "T", start_time: "09:05", purse: "12.000", currency: "EUR"}