在 Angular 中按对象属性对元素进行分组

Aer*_*rra 3 typescript ionic-framework angular

在 Ionic 4 (Angular) 中,我想为项目的每个唯一“类型”属性创建一个 div,并在所述 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'
      },
    ];
Run Code Online (Sandbox Code Playgroud)

像这样:

<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>

Run Code Online (Sandbox Code Playgroud)

Fat*_*zli 8

首先,您应该按类型对数据进行分组:

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

然后尝试使用键值管道显示您的数据:

<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>
Run Code Online (Sandbox Code Playgroud)

检查演示