I have a list of courses in below json. I have tried to get the desired output to make the array as I want but I am getting the isssues in making the new array.
I am trying to get it using the below snippet but it is showing error for using [courses[i].client_id]
with the result
.
let courses = [ {course_id: 1, name: "Test1", description: "Test1 desc", video_url: "111", client_id: 1}, {course_id: 3, name: "A new course", description: "This is a temporary description used to test functionality. ", video_url: "https://vimeo.com/", client_id: 1}, {course_id: 5, name: "Teaching", description: "programming language", video_url: "https://vimeo.com", client_id: 1}, {course_id: 13, name: "Course285", description: "desc285", video_url: "", client_id: 2}, {course_id: 16, name: "The NEW", description: "The Course is an training", video_url: "https://vimeo.com/", client_id: 1} ] let result = []; for (let i = 0; i < courses.length; i++) { if (courses && courses.length) { result[i][courses[i].client_id] = { clientId: courses[i].client_id }; } }
Expected Output
[
{client_id: 1, courses:[{
course_id:1,
course_name: Test1,
course_desc: description
},{
course_id:2,
course_name: Test1,
course_desc: description
}]},
{client_id:2,courses[{
....
}]}
]
My case with reduce:
const userCourses = courses.reduce((acc, rec) => {
const user = acc.find(a=>a.client_id === rec.client_id)
if (user) {
user.courses = [...user.courses, {course_id:rec.course_id, course_name: rec.name, course_desc: rec.description}]
return [...acc]
}
return [...acc, { client_id: rec.client_id, courses: [{course_id: rec.course_id, course_name: rec.name, course_desc: rec.description}] }]
}, [])
See in the playground: https://jscomplete.com/playground/s538993
My take on this:
courses
.map(course => course.client_id)
.filter((val, idx, arr) => arr.indexOf(val) === idx)
.map(clientId => ({
client_id: clientId,
courses: courses
.filter(course => course.client_id === clientId)
.map(course => ({
course_id: course.course_id,
course_name: course.name,
course_desc: course.description
}))
}))
let courses = [{ course_id: 1, name: "Test1", description: "Test1 desc", video_url: "111", client_id: 1 }, { course_id: 3, name: "A new course", description: "This is a temporary description used to test functionality. ", video_url: "https://vimeo.com/", client_id: 1 }, { course_id: 5, name: "Teaching", description: "programming language", video_url: "https://vimeo.com", client_id: 1 }, { course_id: 13, name: "Course285", description: "desc285", video_url: "", client_id: 2 }, { course_id: 16, name: "The NEW", description: "The Course is an training", video_url: "https://vimeo.com/", client_id: 1 } ] let result = {} courses.map(course => { let newCourse = { course_id: course.course_id, course_name: course.name, course_desc: course.description } result[course.client_id]? result[course.client_id].courses.push(newCourse): result[course.client_id] = { client_id: course.client_id, courses: [newCourse] } }) let output = Object.values(result) console.log(output)
const courses = [ { course_id: 1, name: 'Test1', description: 'Test1 desc', video_url: '111', client_id: 1 }, { course_id: 3, name: 'A new course', description: 'This is a temporary description used to test functionality. ', video_url: 'https://vimeo.com/', client_id: 1 }, { course_id: 5, name: 'Teaching', description: 'programming language', video_url: 'https://vimeo.com', client_id: 1 }, { course_id: 13, name: 'Course285', description: 'desc285', video_url: '', client_id: 2 }, { course_id: 16, name: 'The NEW', description: 'The Course is an training', video_url: 'https://vimeo.com/', client_id: 1 } ] const output = courses.reduce((output, course) => { const { client_id, course_id, name, description } = course; const client = () => output.find(client => client.client_id == client_id); (client() || output.push({ client_id, courses: [] }) && client()).courses.push({ course_id, course_name: name, course_desc: description }); return output; }, []); console.log(output);
let courses = [
{
course_id: 1,
name: "Test1",
description: "Test1 desc",
video_url: "111",
client_id: 1
},
{
course_id: 3,
name: "A new course",
description: "This is a temporary description used to test functionality. ",
video_url: "https://vimeo.com/",
client_id: 1
},
{
course_id: 5,
name: "Teaching",
description: "programming language",
video_url: "https://vimeo.com",
client_id: 1
},
{
course_id: 13,
name: "Course285",
description: "desc285",
video_url: "",
client_id: 2
},
{
course_id: 16,
name: "The NEW",
description: "The Course is an training",
video_url: "https://vimeo.com/",
client_id: 1
}
]
const arr = courses.reduce((acc, obj) => {
const accObj = acc.find(e => e.client_id == obj.client_id);
const courseObj = {
course_id: obj.course_id,
course_name: obj.name,
course_desc: obj.description
};
if (accObj) {
accObj.courses = [...accObj.courses, courseObj];
return acc
}
return [...acc, { client_id: obj.client_id, courses: [courseObj] }];
}, []);
console.log(arr);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.