Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

141
Vistas
Crear objeto anidado desde serializeArray

Me gustaría crear esta estructura:

 { "officine_type": "Pharmacie", "officine_value": 2002626, "declared_lines": [ { "ean": 3578835501148, "qty": 1 }, { "ean": 3578835502671, "qty": 2 } ], "other_value": "my other value" }

Desde serializeArray() con esta salida:

 0: {name: 'declared_lines.0.ean', value: '3578835502244'} 1: {name: 'declared_lines.0.qty', value: '4'} 2: {name: 'declared_lines.1.ean', value: '3578835502220'} 3: {name: 'declared_lines.1.qty', value: '1'} 4: {name: 'declared_lines.2.ean', value: ''} 5: {name: 'declared_lines.2.qty', value: '0'} 6: {name: 'officine_type', value: 'Pharmacy'} 7: {name: 'officine_value', value: '2000461'} 8: {name: 'other_value', value: ''}

Estoy luchando sobre cómo empujar subobjetos en líneas declared_lines

Ahora mismo tengo esto:

 let formData = form.serializeArray(); for (let i = 0; i < formData.length; i++) { if (formData[i]['name'].indexOf('declared_lines') !== 1) { let inputName = formData[i]['name'].split('.'); let namespace = inputName[0]; let n = inputName[1]; let key = inputName[2]; let subObj = {}; let current = 'declared_lines['+i+']'; let previous = 'declared_lines['+(i-1)+']'; if (obj.hasOwnProperty(namespace) === false) { obj[namespace] = []; } } obj[formData[i]['name']] = formData[i]['value']; }

Mi cerebro no da para más :(

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede tomar el nombre y dividirlo por puntos para la ruta del nuevo objeto y el valor y crear un nuevo objeto con la información proporcionada.

En setValue , reduce la devolución de llamada verifica si la siguiente clave es un valor numérico de cadena y toma una matriz como objeto predeterminado en lugar de un objeto.

 function setValue(object, path, value) { const last = path.pop(); path .reduce((o, k, i, kk) => o[k] ??= (isFinite(i + 1 in kk ? kk[i + 1] : last) ? [] : {}), object) [last] = value; return object; } const data = [{ name: 'declared_lines.0.ean', value: '3578835502244' }, { name: 'declared_lines.0.qty', value: '4' }, { name: 'declared_lines.1.ean', value: '3578835502220' }, { name: 'declared_lines.1.qty', value: '1' }, { name: 'declared_lines.2.ean', value: '' }, { name: 'declared_lines.2.qty', value: '0' }, { name: 'officine_type', value: 'Pharmacy' }, { name: 'officine_value', value: '2000461' }, { name: 'other_value', value: '' }], result = data.reduce( (object, { name, value }) => setValue(object, name.split('.'), value), {} ); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

La desestructuración de objetos y array.reduce pueden hacer que su código sea más legible, intente:

 let formData = [ {name: 'declared_lines.0.ean', value: '3578835502244'}, {name: 'declared_lines.0.qty', value: '4'}, {name: 'declared_lines.1.ean', value: '3578835502220'}, {name: 'declared_lines.1.qty', value: '1'}, {name: 'declared_lines.2.ean', value: ''}, {name: 'declared_lines.2.qty', value: '0'}, {name: 'officine_type', value: 'Pharmacy'}, {name: 'officine_value', value: '2000461'}, {name: 'other_value', value: ''} ]; let output = formData.reduce((acc,cur) => { let { name, value } = cur; if(name.indexOf('declared_lines') === -1){ acc[name] = value; } else { let [namespace, n, key] = name.split('.'); if(!acc[namespace]) acc[namespace] = []; if(!acc[namespace][n]) acc[namespace][n] = {}; acc[namespace][n][key] = value; } return acc; }, {}); console.log(output);

En este caso, reduce comienza con un objeto vacío y recorre su matriz para procesar cada elemento ( cur ).

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda