叶南淮
叶南淮
  • 发布:2020-01-02 14:27
  • 更新:2020-01-02 16:49
  • 阅读:1677

js数组怎么按属性分类,不用嵌套遍历

分类:HBuilderX

后台给了商品的数据接口,要按同一供应商分类渲染。其中 gysid是供应商的名字,现在已经按gysid排序好了。
数据格式:
[{spid:01,gysid:a,spname:商品1,price:2},
{spid:02,gysid:a,spname:商品2,price:21},
{spid:03,gysid:b,spname:商品3,price:56},
{spid:04,gysid:c,spname:商品4,price:21},
{spid:05,gysid:c,spname:商品5,price:23}]

要实现如下图效果,供应商的名字加这类商品,不能用嵌套遍历!!求大神帮忙!!!

2020-01-02 14:27 负责人:无 分享
已邀请:
菜鸡

菜鸡

把后端返回的数据遍历一遍
遍历成如下形式

复制代码[  
  {  
    gysid:a,  
    goodsList: [{spid:01,gysid:a,spname:商品1,price:2},{spid:02,gysid:a,spname:商品2,price:2}]  
  },  
  {  
    gysid:b,  
    goodsList: [{spid:01,gysid:b,spname:商品3,price:2}]  
  }  
]

进行页面渲染即可

IT梅

IT梅 - 一个前端开发者

复制代码let arr = [{spid:'01',gysid:"a",spname:"商品1",price:2},  
{spid:'02',gysid:"a",spname:"商品2",price:21},  
{spid:'03',gysid:"b",spname:"商品3",price:56},  
{spid:'04',gysid:"c",spname:"商品4",price:21},  
{spid:'05',gysid:"c",spname:"商品5",price:23}]  

let obj = arr.reduce((last,item)=>{  
     if(last[item.gysid]){  
         last[item.gysid].push(item)  
     }else{  
         last[item.gysid]=[item]  
     }  
    return last  
},{})  

console.log(obj);  

循环obj即可
  • 叶南淮 (作者)

    解决了 谢谢

    2020-01-03 09:28

该问题目前已经被锁定, 无法添加新回复

  • 标题 / 粗斜体
  • 代码片段
  • 超链接 / 图片 / 视频
  • 列表 / 引用

文章内容较多时,可以用标题分段 :

## 大标题 
### 小标题

斜体 / 粗体 :

**粗体** 
*斜体*
***粗斜体***

代码片段 :

``` javascript
代码片段
```

超链接 :

[链接文字](链接地址) 例: [百度](http://www.baidu.com)

图片 :

![图片说明](图片地址) 例: ![百度logo](http://www.baidu.com/img/bdlogo.gif)

视频 :

!![视频说明](视频地址) 例: !![优酷视频](http://youku.com)

有序列表 :

1. 123
2. 123
3. 123

无序列表 :

- 123
- 123
- 123

引用 : ( 双回车后结束引用 )

> 引用内容
引用内容
引用内容