Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

104
Views
Anidamiento por niveles a partir de una matriz plana de objetos

Estoy tratando de aprender más sobre la matriz de objetos. He aplanado una variedad de objetos y estoy tratando de anidarlos con niveles cuando tienen valores únicos. La cosa es que ahora estoy usando reducir y obteniendo nuevos objetos para cada uno.

 data = [ { name1 : 'Tenis', id1: 1, name2: ATP, id2: 2, name3: Men Singles, id3: 4} { name1 : 'Tenis', id1: 1, name2: ATP, id2: 2, name3: Men Singles, id3: 4} { name1 : 'Tenis', id1: 1, name2: ATP, id2: 2, name3: Men Doubles, id3: 5} { name1 : 'Tenis', id1: 1, name2: WTA, id2: 3, name3: Women Doubles, id3: 6} { name1 : 'Tenis', id1: 1, name2: WTA, id2: 3, name3: Women Singles, id3: 7} ]

Quiero que el resultado sea:

 result: [ { sport: 'Tenis', league: [{ ATP: [{ event: Men Singles, Men Doubles }] WTA: [{ event: Women Singles, Women Doubles }] }] }]

Mi código ahora:

 const result = data.reduce((arr, item) => { if (arr.indexOf(item.name1) === -1) { arr.push({ sport: item.name1 , league: item.name2 , event: item.name3 , }) } return arr }, [])

Pero obtengo todos los valores:

 0: {sportName: 'Tenis', league: 'ATP', event: 'Men Singles'} 1: {sportName: 'Tenis', league: 'WTA', event: 'Women Doubles'} 2: {sportName: 'Tenis', league: 'WTA', event: 'Women Doubles'} .... etc

¿Qué debo hacer para obtener un objeto anidado? Estoy literalmente bloqueado en la mente.

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Definitivamente recomiendo no envolver cada objeto con una matriz

 const data = [{ name1 : 'Tenis', id1: 1, name2: 'ATP', id2: 2, name3: 'Men Singles', id3: 4},{ name1 : 'Tenis', id1: 1, name2: 'ATP', id2: 2, name3: 'Men Singles', id3: 4},{ name1 : 'Tenis', id1: 1, name2: 'ATP', id2: 2, name3: 'Men Doubles', id3: 5},{ name1 : 'Tenis', id1: 1, name2: 'WTA', id2: 3, name3: 'Women Doubles', id3: 6},{ name1 : 'Tenis', id1: 1, name2: 'WTA', id2: 3, name3: 'Women Singles', id3: 7}] const tranform = () => { const sport = data[0]['name1']; const league = data.reduce((r, e) => { r[e['name2']] ??= [] if (!r[e['name2']].includes(e['name3'])) { r[e['name2']].push(e['name3']) } return r; }, {}); return { sport, league }; }; console.log(tranform())
 .as-console-wrapper { max-height: 100% !important; top: 0 }

about 4 years ago · Santiago Trujillo Report

0

Debe presionar las matrices internas específicas después de verificar si el valor ya está allí. Hacemos esto por el deporte, luego por la liga, luego por el evento.

Nota: Usé una matriz para la propiedad de events .

 data = [ { name1 : 'Tenis', id1: 1, name2: 'ATP', id2: 2, name3: 'Men Singles', id3: 4}, { name1 : 'Tenis', id1: 1, name2: 'ATP', id2: 2, name3: 'Men Singles', id3: 4}, { name1 : 'Tenis', id1: 1, name2: 'ATP', id2: 2, name3: 'Men Doubles', id3: 5}, { name1 : 'Tenis', id1: 1, name2: 'WTA', id2: 3, name3: 'Women Doubles', id3: 6}, { name1 : 'Tenis', id1: 1, name2: 'WTA', id2: 3, name3: 'Women Singles', id3: 7} ] const result = data.reduce((output, obj) => { // Sport Check - if not in, add the sport with the current league & event const sportObj = output.find(item => item.sport === obj.name1) if (!sportObj) { output.push( { sport: obj.name1, league: [{ [obj.name2]: [{ events: [obj.name3] }] }] }) return output } // League Check - If not in, add a league to the sport with the current event const leagueObj = sportObj.league[0][obj.name2] if (!leagueObj) { sportObj.league[0][obj.name2] = [{ events: [obj.name3] }] } else { // Event Check - if not in, add the event. If not, don't do anything. const eventsArray = leagueObj[0].events if (!eventsArray.includes(obj.name3)) eventsArray.push(obj.name3) } return output }, []) console.log(result)

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!