数组根据某项分组

一个数组中,每个数组对象有个公有属性,按照这个属性对数组进行分组(业务中遇到)。

后端返回数组

将此数组按照category_name将数组分组,得到的数据结构方便我们渲染。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// js中方法
groupData = data.data.infos;
let map = {},
groupItems = [];
for(let i = 0; i < groupData.length; i++){
let items = groupData[i];
items.label=items.name;
items.value=items.id;
items.checked=false;
if(!map[items.category_name]){
groupItems.push({
indeterminate:null, //样式需要
checked:false,
name: items.category_name,
data: [items]
});
map[items.category_name] = items;
}else{
for(let j = 0; j < groupItems.length; j++){
let s = groupItems[j];
if(s.name == items.category_name){
s.data.push(items);
break;
}
}
}
}
this.groupItems = groupItems;
1
2
3
4
5
6
7
8
9
10
11
12
 <!-- html-angular-antd-渲染  -->
<div *ngFor="let item of groupItems;let idx=index" >
<div style="background-color: white;margin: 10px 0;padding: 10px;">
<div style="border-bottom: 1px solid rgb(233, 233, 233);">
<label nz-checkbox [(ngModel)]="item.checked" (ngModelChange)="updateAllChecked(idx)" [(nzIndeterminate)]="item.indeterminate" style="font-weight: 600">
{{item.name ? item.name : '其它'}}
</label>
</div>
<br>
<nz-checkbox-group class="input-demo" [(ngModel)]="item.data" (ngModelChange)="updateSingleChecked(idx)"></nz-checkbox-group>
</div>
</div>

业务需要实现单选,全选checkbox

感谢你的打赏哦!