[英]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.