Использование двойного groupBy в lodash - PullRequest
0 голосов
/ 03 декабря 2018

Итак, я пытаюсь классифицировать массив объектов по определенному атрибуту.Использование groupBy прекрасно работает с первого раза.Теперь мне нужно пройтись по этим группировкам и снова сгруппировать их на основе отдельного атрибута.У меня проблемы с этим, может ли кто-нибудь помочь мне?

TS

this.accountService.getAccountListWithBalance().subscribe(accounts => {
      this.accountList = _.groupBy(accounts, 'category');
      for (var property in this.accountList) {
        if (this.accountList.hasOwnProperty(property)) {
          this.accountList.property = _.groupBy(this.accountList.property, 'subcategory');
        }
      }

generateArray(obj){
    return Object.keys(obj).map((key)=>{ return {key:key, value:obj[key]}});
  }

HTML:

<ul *ngFor="let item of generateArray(accountList)">
  <strong>{{ item.key }}</strong>
  <li *ngFor="let i of item.value">{{i.name}}</li>
</ul>

HTML не установлен для следующего уровня взаимодействия, ноЯ знаю, что это не работает, если я просто консоль журнала в результате объекта.Как я уже говорил, он сортируется в первый раз, а не во второй.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Я смог заставить его работать, просто изменив мой синтаксис.Использование [] вместо ., поэтому рабочий код выглядит следующим образом.

this.accountService.getAccountListWithBalance().subscribe(accounts => {
      this.accountList = _.groupBy(accounts, 'category');
      for (var property in this.accountList) {
        if (this.accountList.hasOwnProperty(property)) {
          this.accountList[property] = _.groupBy(this.accountList[property], 'subcategory');
        }
      }
0 голосов
/ 03 декабря 2018

Я считаю, что когда вы просматриваете счета, сгруппированные по категориям, вы должны попытаться сгруппировать каждый элемент, сгруппированный по категориям, на основе subcategory, как это;

this.accountList = _.groupBy(accounts, 'category');
    _.foreach(this.accountList, function(categoryAccount) { 
              _.groupBy(categoryAccount, 'subcategory');
            });
...