現(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ù)組也可以使用字符串作為下標。
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ù)組對象。
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);
/**
* 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)
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);
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。