为了账号安全,请及时绑定邮箱和手机立即绑定

现有这样一段json,问怎么才能处理成为我想要的格式呢?

现有这样一段json,问怎么才能处理成为我想要的格式呢?

郎朗坤 2019-03-06 17:19:57
现有这样一段json,问怎么才能处理成为我想要的格式呢?        articleList:[                {id:1,name:"小红",user:456312,Occupation:"教练"},                {id:2,name:"小张",user:456321,Occupation:"歌手"},                {id:3,name:"小强",user:456312,Occupation:"老师"},                {id:1,name:"小分",user:456312,Occupation:"同事"},                {id:2,name:"小撒",user:456132,Occupation:"总经理"},                {id:3,name:"小看",user:456132,Occupation:"程序猿"},                {id:1,name:"小贫",user:451632,Occupation:"演员"}            ],                                    把id相同的放在一个数组里面,用js代码怎么实现呢?大神        articleList:[                {                    id:1,                    list:[                            {name:"小红",user:456312,Occupation:"教练"},                            {name:"小分",user:456312,Occupation:"同事"}.                            {name:"小贫",user:451632,Occupation:"演员"}                     ]                },                {                    id:2,                    list:[                            {name:"小张",user:456321,Occupation:"歌手"},                            {name:"小撒",user:456132,Occupation:"总经理"}                     ]                },                {                    id:,                    list:[                            {name:"小强",user:456312,Occupation:"老师"},                            {name:"小看",user:456132,Occupation:"程序猿"}                     ]                }            ]
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

这一段可以实现你说的功能。比较简单,就是按id往数组对应的下标里写东西就好了。


let articleList = [

    { id: 1, name: "小红", user: 456312, Occupation: "教练" },

    { id: 2, name: "小张", user: 456321, Occupation: "歌手" },

    { id: 3, name: "小强", user: 456312, Occupation: "老师" },

    { id: 1, name: "小分", user: 456312, Occupation: "同事" },

    { id: 2, name: "小撒", user: 456132, Occupation: "总经理" },

    { id: 3, name: "小看", user: 456132, Occupation: "程序猿" },

    { id: 1, name: "小贫", user: 451632, Occupation: "演员" }

];


let newObject = [];


//循环

for (let index in articleList) {

    //取对象

    let o = articleList[index];

    //第一次为一个id增加对象

    if (!newObject[o.id]) {

        newObject[o.id] = {

            id: o.id,

            list: []

        }

    }

    //加入进去

    newObject[o.id].list.push({

        name: o.name,

        user: o.user,

        Occupation: o.Occupation

    })

}

//打印结果

console.log(newObject);

以上代码会在数组里产生空值,使用for(let i = 0;i<a.length;i++)遍历会取出undefine。其实使用for in遍历就不会出现这个问题。可以增加代码如下:


    let array = [];

    for (let key in newObject){

      array.push(newObject[key])

    }

    console.log('array',array);

可以看到是可以正常遍历的,即使id是字符串,上述代码也不会有问题,因为数组也可以使用字符串作为下标。


查看完整回答
反对 回复 2019-03-15
?
哔哔one

TA贡献1854条经验 获得超8个赞

let foldById = data => data.reduce((acc, cur) => {

    let { id, name, user, Occupation } = cur; 

    let toInsert = { name, user, Occupation }; 

    

    if (acc[id]){

        acc[id].list.push(toInsert); 

    } else {

        acc[id] = { id, list: [ toInsert ] }

    }


    return acc; 

}, {});

结果是类数组对象。


test

let data = [

    { id: 1, name: "小红", user: 456312, Occupation: "教练" },

    { id: 2, name: "小张", user: 456321, Occupation: "歌手" },

    { id: 3, name: "小强", user: 456312, Occupation: "老师" },

    { id: 1, name: "小分", user: 456312, Occupation: "同事" },

    { id: 2, name: "小撒", user: 456132, Occupation: "总经理" },

    { id: 3, name: "小看", user: 456132, Occupation: "程序猿" },

    { id: 1, name: "小贫", user: 451632, Occupation: "演员" }

];


foldById(data); 

https://img1.sycdn.imooc.com//5c8b06d90001ba5405190531.jpg

查看完整回答
反对 回复 2019-03-15
  • 3 回答
  • 0 关注
  • 538 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号