Как мне сгруппировать HTML-таблицу с тем же значением из массива (Javascript)

#html #arrays #angular #html-table #ngfor

#HTML #массивы #угловой #html-таблица #ngfor

Вопрос:

У меня есть массив с данными о встречах, подобными этому, из которого я хочу создавать таблицы:

 [
 { 
  day: '20/10/2020',
  subject: 'meeting',
  client: 'Rob'
  location: 'Office
 },
{ 
  day: '21/10/2020',
  subject: 'meeting',
  client: 'Lisa'
  location: 'Town'
 },
{ 
  day: '21/10/2020',
  subject: 'meeting',
  client: 'Kevin'
  location: 'Office
 },
 { 
  day: '22/10/2020',
  subject: 'meeting',
  client: 'Kevin'
  location: 'Home'
 }
]
  

мой HTML-файл:

  <div *ngFor="let appointment of appointments"   class="card-body">
   <table class="table table-striped">
     <thead>
  <tr>
  <th>  Day </th>
  <th>Where </th>
  <th> Client</th>
  <th>Subject</th>
  </tr>
  </thead>
  <tfoot>
  <tr>
  <td>  <small>{{appointment.day}}</small></td>
  <td> <small>{{appointment.location}} </small> </td>
  <td><small>{{appointment.client}}</small> </td>
    <td><small>{{appointment.subject}} </small></td>
  </tfoot>
</table>
</div>
  

Это создает таблицу для каждой встречи, но как я могу сделать так, чтобы встречи в один и тот же день отображались друг под другом, без промежуточного заголовка. Итак, вот так: (визуализация)

введите описание изображения здесь

любая помощь приветствуется

Ответ №1:

Существует очень простой способ решить вашу проблему, давайте сделаем это. Мы будем использовать библиотеку Lodash, поэтому в первую очередь вам нужно будет импортировать.

Установка через NPM:

 npm i lodash
npm i --save-dev @types/lodash
  

И импортировать в наш проект:

 import * as _ from 'lodash';
  

Итак, происходит волшебство с нашим только что импортированным другом и его groupBy() методом:

 let result = _.groupBy(this.appointments, (appointment) => {
return appointments.day;
});
console.log(result);
  

Результат из консоли будет:

 {
  "20/10/2020": [
    {
      "day": "20/10/2020",
      "subject": "meeting",
      "client": "Rob",
      "location": "Office"
    }
  ],
  "21/10/2020": [
    {
      "day": "21/10/2020",
      "subject": "meeting",
      "client": "Lisa",
      "location": "Town"
    },
    {
      "day": "21/10/2020",
      "subject": "meeting",
      "client": "Kevin",
      "location": "Office"
    }
  ],
  "22/10/2020": [
    {
      "day": "22/10/2020",
      "subject": "meeting",
      "client": "Kevin",
      "location": "Home"
    }
  ]
}
  

Комментарии:

1. когда я делаю это, это работает, но это портит порядок дат, как я могу упорядочить его по дате? Спасибо