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();
  }
}