Сортировка вложенного массива объекта по угловому - PullRequest
0 голосов
/ 24 октября 2018

У меня есть этот json, прикрепленный к мат-таблице

const pendingUsers: pendingUsersData [] = [{
  'autoReLogin': false,
  'rolesAccess': [{
    'requestReason': 'because i need it',
    'status': 'pending',
    'role': 'API_ApplicationDeveloper'
  }],
  'userId': 'f123132',
  'emailId': 'me@google.com',
  'firstName': 'Me',
  'lastName': 'ME',
  'country': 'IN'
}, {
  'autoReLogin': false,
  'rolesAccess': [{
    'requestReason': ' ',
    'status': 'pending',
    'role': 'API_ApplicationDeveloper'
  }],
  'userId': 'F12455',
  'emailId': 'ak@gmail.com',
  'firstName': 'AKl',
  'lastName': 'M',
  'country': 'IN'
}, {
  'autoReLogin': false,
  'rolesAccess': [{
    'requestReason': ' ',
    'status': 'pending',
    'role': 'API_ApplicationDeveloper'
  }],
  'userId': 'F14123',
  'emailId': 'pg@gmail.com',
  'firstName': 'Prs',
  'lastName': 'Gpta',
  'country': 'IN'
}, {
  'autoReLogin': false,
  'rolesAccess': [{
    'requestReason': 'exception_response_reason',
    'status': 'pending',
    'role': 'API_ApplicationDeveloper'
  }],
  'userId': 'F99349',
  'emailId': 'ank.sh@gmail.com',
  'firstName': 'Ank',
  'lastName': 'Shy',
  'country': 'IN'
}];

Я использую следующий код для сортировки столбцов

ngAfterViewInit() {
this.pendingUsersDataSource.paginator = this.paginator.toArray()[0];
this.pendingUsersDataSource.sort = this.sort.toArray()[0];
this.pendingUsersDataSource.sortingDataAccessor = (item, property) => {
  switch (property) {
    case 'rolesAccess[0].requestReason': return item.rolesAccess[0].requestReason;
    default: return item[property];
  }
};

}

Сортировка кажетсяхорошо работать для всех столбцов, кроме тех, которые прикреплены к roleAccess.Я также мог бы сортировать на основе requestReason и роли.На данный момент сортировка не происходит.

1 Ответ

0 голосов
/ 06 ноября 2018

Попробуйте это для вложенных объектов:

this.dataSource.sortingDataAccessor = (item, property) => {
  if (property.includes('.')) return property.split('.').reduce((o,i)=>o[i], item);
  return item[property];
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...