Hur man sorterar en array av objekt baserat på en nästlad egenskap i Aurelia/Typescript
Jag måste sortera arrayen av objekt efter dess inbäddade egenskaper. Mer exakt måste jag sortera payment som härrör från service.payments-objektet baserat på payment.paymentDate-egenskapen.
Finns det ett sätt att anpassa sorteringskonverterarkoden eller ändra HTML så att jag kan sortera betalningen baserat på paymentDate?
Se koden nedan för mer information:
Detta är HTML-koden:
<ul>
<li repeat.for="payment of service.payments | sort:payment.paymentDate:'ascending'">
${'dashboard:contracts.desc.custPayment' & t: {
value: payment.value,
currency: payment.currency,
date: formatDate(payment.paymentDate)
}}
</li>
</ul>
Detta är min SortValueConverter-kod:
export class SortValueConverter {
toView(array: {}[], property: string, direction: string) {
let sorted = [].slice.call(array).sort((a, b) => {
if (a[property] > b[property]) return 1;
if (a[property] < b[property]) return -1;
return 0;
});
return direction === 'ascending' ? sorted : sorted.reverse();
}
}
Här är data:
Svar #1
Baserat på den typ av valueConverter du angav nedan, bör din HTML se ut så här:
<li repeat.for="payment of service.payments | sort:'paymentDate':'ascending'">
${'dashboard:contracts.desc.custPayment' & t: {
value: payment.value,
currency: payment.currency,
date: formatDate(payment.paymentDate)
}}
</li>
också: varför inte bara använda array sorteringsfunktion regelbundet?
export class SortValueConverter {
toView(arr: any[], property: string, direction: string) {
const sorted = arr.sort((a, b) => a[property] - b[property]));
return direction === 'ascending' ? sorted : sorted.reverse();
}
}
