Estoy tratando de cambiar la clave por los valores, los valores por la clave, pero no pude encontrar la solución correcta usando javascript/mecanografiado.
course = [ { "name" : "John", "course" : ["Java", "Python"] }, { "name" : "Michel", "course" : ["Java", "Python", "Ruby"] } ]Quiero que el resultado json sea el siguiente:
result = [ { "course" : "Java", "name" : ["John", "Michel"] }, { "course" : "Python", "name" : ["John", "Michel"] }, { "course" : "Ruby", "name" : ["Michel"] } ]Aquí hay una solución JS. Estoy agrupando usando reduce para obtener este objeto intermedio
{ Java: { course: "Java", name: ["John", "Michel"] }, Python: { course: "Python", name: ["John", "Michel"] }, Ruby: { course: "Ruby", name: ["Michel"] } } Luego llamaré a Object.values en este objeto intermedio a la matriz de valores según lo necesite
const course = [ { "name" : "John", "course" : ["Java", "Python"] }, { "name" : "Michel", "course" : ["Java", "Python", "Ruby"] } ] const result = Object.values(course.reduce((acc,{name,course}) => { course.forEach(c => { acc[c]??={course:c,name:[]} acc[c].name.push(name) }) return acc },{})) console.log(result) const course = [{ name: 'John', course: ['Java', 'Python'], }, { name: 'Michel', course: ['Java', 'Python', 'Ruby'], }, ] const temp = course.reduce((acc, value) => { value.course.forEach(item => { if (!acc[item]) { acc[item] = [] } acc[item].push(value.name) }) return acc }, {}) const result = Object.entries(temp).reduce((acc, [course, name]) => { acc.push({ course, name, }) return acc }, []) console.log(result)