Группировать элементы по свойству объекта в Angular - PullRequest
0 голосов
/ 04 ноября 2019

В Ionic 4 (Angular) я хочу создать div для каждого уникального свойства 'type' элементов и добавить все элементы с одинаковым 'type' под указанным div.

Например,Я хочу вывести следующий массив:

items = [
      {
        type: 'type1',
        question: 'question1',
        answer: 'answer1'
      },
      {
        type: 'type2',
        question: 'question2',
        answer: 'answer2'
      },
      {
        type: 'type2',
        question: 'question3',
        answer: 'answer3'
      },
      {
        type: 'type3',
        question: 'question4',
        answer: 'answer4'
      },
    ];

как это:

<div id="type1">
   <div class="item">
       <h1>question1</h1>
       <div>answer1</div> 
   </div>
</div>

<div id="type2">
   <div class="item">
       <h1>question2</h1>
       <div>answer2</div> 
   </div>

   <div class="item">
       <h1>question3</h1>
       <div>answer3</div> 
   </div>
</div>

<div id="type3">
   <div class="item">
       <h1>question4</h1>
       <div>answer4</div> 
   </div>
</div>

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Сначала вы должны сгруппировать ваши данные по типу:

groupByType(array){
    return array.reduce((r, a) => {
          r[a.type] = r[a.type] || [];
          r[a.type].push(a);
          return r;
      }, Object.create(null));
  }

Затем попробуйте показать ваши данные с использованием ключевого значения:

<div *ngFor="let item of newItems | keyvalue">
  <div id="{{item.key}}">
    {{item.key}}
    <div class="item" *ngFor="let value of item.value">
      <div>{{value.question}}</div>
      <div>{{value.answer}}</div>
      <br>
    </div>
</div>
</div>

check DEMO .

1 голос
/ 04 ноября 2019

вы можете использовать это:

groupBy(list, property) {
        return list.reduce((groups, item) => {
            const val = item[property];
            groups[val] = groups[val] || [];
            groups[val].push(item);
            return groups;
        }, {});
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...