Как отсортировать массив объектов на основе вложенного свойства в Aurelia / Typescript - PullRequest
0 голосов
/ 18 февраля 2019

Я должен отсортировать массив объектов по его вложенным свойствам.Точнее, я должен отсортировать payment , полученный из service.payments объекта, на основе payment.paymentDate property.

Есть ли способнастроить код конвертера сортировки или изменить HTML-код, чтобы я мог сортировать платеж на основе paymentDate?

Подробнее см. в приведенном ниже коде:

Это HTML-код:

<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>

Это мой код SortValueConverter:

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

Вот данные:

enter image description here

1 Ответ

0 голосов
/ 18 февраля 2019

в зависимости от значения valueConverter, указанного вами ниже, ваш HTML должен выглядеть следующим образом:

<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>

также: почему бы просто не использовать регулярную функцию сортировки по массиву?

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