Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

140
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda