3 回答

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊
這一段可以實(shí)現(xiàn)你說的功能。比較簡(jiǎn)單,就是按id往數(shù)組對(duì)應(yīng)的下標(biāo)里寫東西就好了。
let articleList = [
{ id: 1, name: "小紅", user: 456312, Occupation: "教練" },
{ id: 2, name: "小張", user: 456321, Occupation: "歌手" },
{ id: 3, name: "小強(qiáng)", 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) {
//取對(duì)象
let o = articleList[index];
//第一次為一個(gè)id增加對(duì)象
if (!newObject[o.id]) {
newObject[o.id] = {
id: o.id,
list: []
}
}
//加入進(jìn)去
newObject[o.id].list.push({
name: o.name,
user: o.user,
Occupation: o.Occupation
})
}
//打印結(jié)果
console.log(newObject);
以上代碼會(huì)在數(shù)組里產(chǎn)生空值,使用for(let i = 0;i<a.length;i++)遍歷會(huì)取出undefine。其實(shí)使用for in遍歷就不會(huì)出現(xiàn)這個(gè)問題??梢栽黾哟a如下:
let array = [];
for (let key in newObject){
array.push(newObject[key])
}
console.log('array',array);
可以看到是可以正常遍歷的,即使id是字符串,上述代碼也不會(huì)有問題,因?yàn)閿?shù)組也可以使用字符串作為下標(biāo)。

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
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ù)組對(duì)象。
test
let data = [
{ id: 1, name: "小紅", user: 456312, Occupation: "教練" },
{ id: 2, name: "小張", user: 456321, Occupation: "歌手" },
{ id: 3, name: "小強(qiáng)", 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);
添加回答
舉報(bào)