鍍金池/ 問答/HTML/ 現(xiàn)有這樣一段json,問怎么才能處理成為我想要的格式呢?

現(xiàn)有這樣一段json,問怎么才能處理成為我想要的格式呢?

現(xiàn)有這樣一段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:"總經(jīng)理"},
                {id:3,name:"小看",user:456132,Occupation:"程序猿"},
                {id:1,name:"小貧",user:451632,Occupation:"演員"}
            ],
            
            
            

把id相同的放在一個數(shù)組里面,用js代碼怎么實現(xiàn)呢?大神

        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:"總經(jīng)理"}
                     ]
                },
                {
                    id:,
                    list:[
                            {name:"小強",user:456312,Occupation:"老師"},
                            {name:"小看",user:456132,Occupation:"程序猿"}
                     ]
                }
            ]
回答
編輯回答
胭脂淚

這一段可以實現(xiàn)你說的功能。比較簡單,就是按id往數(shù)組對應(yīng)的下標里寫東西就好了。

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: "總經(jīng)理" },
    { id: 3, name: "小看", user: 456132, Occupation: "程序猿" },
    { id: 1, name: "小貧", user: 451632, Occupation: "演員" }
];

let newObject = [];

//循環(huán)
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
    })
}
//打印結(jié)果
console.log(newObject);

以上代碼會在數(shù)組里產(chǎn)生空值,使用for(let i = 0;i<a.length;i++)遍歷會取出undefine。其實使用for in遍歷就不會出現(xiàn)這個問題。可以增加代碼如下:

    let array = [];
    for (let key in newObject){
      array.push(newObject[key])
    }
    console.log('array',array);

可以看到是可以正常遍歷的,即使id是字符串,上述代碼也不會有問題,因為數(shù)組也可以使用字符串作為下標。

2017年1月22日 04:49
編輯回答
澐染

遍歷第一個json,把同一id的放倒一個列表中就好了!

2018年6月20日 18:49
編輯回答
萌二代
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; 
}, {});

結(jié)果是類數(shù)組對象。

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: "總經(jīng)理" },
    { id: 3, name: "小看", user: 456132, Occupation: "程序猿" },
    { id: 1, name: "小貧", user: 451632, Occupation: "演員" }
];

foldById(data); 

clipboard.png

2017年3月26日 18:08
編輯回答
毀與悔
/* 你就算把id換成qwer9538都沒事 */
let articleList = [/* 省略 */]
let newList = []
let aMap = {}
articleList.forEach(a => {
  if (!(('' + a.id) in aMap)){
    aMap['' + a.id] = newList.length
    newList.push({
      id: a.id,
      list: [{/* 省略 */}]
    })
  } else {
    newList[aMap['' + a.id]].list.push({/* 省略 */})
  }
})
2018年7月10日 17:25
編輯回答
厭遇
/**
 * var arr = [{name:"aaa",age:50},{name:"bbb",age:3},{name:"ccc",age:3}]
 * groupBy(arr,"age")
 * arr -> [{key:3,list:[{name:"bbb",age:3},{name:"ccc",age:3}]},{key:50,list:[{name:"aaa",age:50}]}]
 * groupBy 按某個key分類(改變原數(shù)組)
 * @param {Array} target 目標數(shù)組
 * @param {String} keyword 關(guān)鍵字
 * @return {Number} length 改變數(shù)組后的長度
 */
function groupBy(target, keyword) {
    var hash = {};
    for (var i = 0, j = 0, l = target.length; i < l; i++) {
        var key = target[i][keyword];
        if (hash[key] === undefined) {
            target[i] = { key: key, list: [target[i]] }
            hash[key] = j++;
        } else {
            target[hash[key]].list.push(target[i]);
        }
    }
    return target.length = j;
}
console.log(groupBy(articleList, "id"), articleList)
2017年9月9日 18:34
編輯回答
喜歡你
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: "總經(jīng)理" },
    { id: 3, name: "小看", user: 456132, Occupation: "程序猿" },
    { id: 1, name: "小貧", user: 451632, Occupation: "演員" }
];
let newArticleList = [];
let idArray = [];
articleList.forEach(article => {
    if (idArray.indexOf(article.id) == -1) {
        idArray.push(article.id);
        newArticleList.push({
            id: article.id,
            list: [{
                name: article.name,
                user: article.user,
                Occupation: article.Occupation
            }]
        });
    } else {
        newArticleList.forEach(newArticle => {
            if (newArticle.id == article.id) {
                newArticle.list.push({
                    name: article.name,
                    user: article.user,
                    Occupation: article.Occupation
                });
            }
        });
    }
});
console.log(newArticleList);
2017年1月29日 16:35