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

149
Views
Transformar matriz de cadenas en objeto

Dados los siguientes valores:

 const values = ['name1|engine1|color1', 'name2|engine2|color2', 'name3|engine3|color3']

Me gustaría crear una matriz para los valores de la misma posición, así:

 cars = { names: ['name1', 'name2', 'name3'], engines: ['engine1', 'engine2', 'engine3'], colors: ['color1', 'color2', 'color3'], ...other properties }

Traté de hacerlo de esta manera:

 values.reduce((acc, value) => { const [name, engine, color] = value.split('|') acc.names.push(name) acc.engines.push(engine) acc.colors.push(color) return acc }, {})

El problema es que acc.name, acc.engine y acc.color aún no existen, y da un error al presionar. ¿Cuál sería una forma de hacer esto limpiamente, teniendo en cuenta que tendrán otras propiedades?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

  • Caso 1.

 const values = [ "name1|engine1|color1", "name2|engine2|color2", "name3|engine3|color3" ]; const cars = { names: [], engines: [], colors: [] }; const result = values.reduce((acc, value) => { const [name, engine, color] = value.split("|"); acc.names.push(name); acc.engines.push(engine); acc.colors.push(color); return acc; }, cars); console.log(result);

  • Caso2.

 const values = [ "name1|engine1|color1", "name2|engine2|color2", "name3|engine3|color3" ]; const result = values.reduce((acc, value) => { const [name, engine, color] = value.split("|"); (acc.names ??= []).push(name); (acc.engines ??= []).push(engine); (acc.colors ??= []).push(color); return acc; }, {}); console.log(result);

about 4 years ago · Juan Pablo Isaza Report

0

Si tiene nombres de propiedad muy largos, también puede hacer esto:

 const values = [ "name1|engine1|color1", "name2|engine2|color2", "name3|engine3|color3" ]; const keys = ["names", "engines", "colors", ...]; const results = values.reduce((acc, value) => { const segments = value.split("|"); keys.forEach((key, index) => { (acc[key] ??= []).push(segments[index]); }); return acc; }, {}); console.log(results)
about 4 years ago · Juan Pablo Isaza Report

0

Object.fromEntries hace que esto sea fácil de hacer en una simple llamada de map :

 const reconstruct = (names, values) => values .map (v => Object .fromEntries (v .split ('|') .map ((v, i) => ([names[i], v])))) console .log (reconstruct ( ['name', 'engine', 'color'], [ 'name1|engine1|color1', 'name2|engine2|color2', 'name3|engine3|color3' ]))
 .as-console-wrapper {max-height: 100% !important; top: 0}

Convertimos cada una de nuestras cadenas en algo como [['name', 'name1'], ['engine', 'engine1'], ['color', 'color1']] luego llamamos a Object.fromEntries en eso.

about 4 years ago · Juan Pablo Isaza 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!