按角度排序嵌套数组对象

时间:2018-10-24 12:45:13

标签: angular sorting angular-material angular-material-table

我将此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 :(得分:0)

对嵌套对象尝试以下操作:

this.dataSource.sortingDataAccessor = (item, property) => {
  if (property.includes('.')) return property.split('.').reduce((o,i)=>o[i], item);
  return item[property];
};