[英]How to turn array into an nested array of objects and arrays?
我想將具有相同category
編號的對象組合到該category
的course
s 數組中。
但我希望最終形式是嵌套數組和對象的數組。
例如,我有一個包含以下數據的數組:
var arr = [
{ category : 1, course : "course 1" },
{ category : 1, course : "course 2" },
{ category : 2, course : "course 3" }
]
我希望新數組看起來像:
output = [
{ category : 1,
courses : [
{ course : "course 1" },
{ course : "course 2" }
]
},
{ category : 2,
courses : [
{ course : "course 3" }
]
}
]
當前代碼:
var output = [], cnt = 0, i;
for (i = 0; i < arr.length; i++) {
output[category] = this.coursesData[i];
cnt++;
}
電流輸出:
output = [
1 : { category : 1, course : "course 2" },
2 : { category : 2, course : "course 3" },
]
期望輸出:
所有具有相同類別的課程都需要合並到該特定類別本身下。
output = [
{ category : 1,
courses : [
{ course : "course 1" },
{ course : "course 2" }
]
},
{ category : 2,
courses : [
{ course : "course 3" }
]
}
]
我嘗試合並具有相同 id 的數組(在我的例子中是類別),但沒有獲得所需的輸出。
你可以嘗試這樣的事情:
const arr = [
{ category: 1, course: "course 1" },
{ category: 1, course: "course 2" },
{ category: 2, course: "course 3" }
];
function transform(arr) {
const output = {};
for (let i = 0; i < arr.length; i++) {
let course = arr[i];
if (output[course.category]) {
output[course.category].push(course);
} else {
output[course.category] = [];
output[course.category].push(course);
}
}
const result = [];
for (let key in output) {
result.push({
"category": key,
"courseList": output[key].map(o => { return { "course": o.course }; })
})
}
console.log(result);
}
transform(arr);
使用Lodash
或類似的庫,可以很好地優化邏輯,但為了基本理解,已經用基本的 JS 編寫代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.