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

95
Visualizações
Cómo hacer una unión desde 2 JSON por un campo de ID común en Javascript

Tengo dos archivos JSON: JSON A tiene algunas propiedades de la empresa y company_id, mientras que JSON B tiene nombres de empresas e identificaciones de empresas.

JSON Un ejemplo:

 [ { "order_name": "Foo", "company_id": "112233" }, { "order_name": "Bar", "company_id": "123456" } ]

Ejemplo JSONB:

 [ { "company_id":"112233", "name":"ACME company", }, { "company_id":"123456", "name":"John Doe Inc.", } ]

¿Cuál es la forma más eficiente de unir los valores company_id ? Me gustaría tener el JSON C (resultado combinado) con los nombres de las empresas agregados correctamente, así:

 [ { "order_name": "Foo", "company_id": "123456", "company_name": "John Doe Inc." }, { "order_name": "Bar", "company_id": "112233", "company_name": "ACME company" } ]

¿Es el bucle y el filtro para cada uno la única solución? ¿Hay una manera más eficiente de hacer esto desde el punto de vista del rendimiento?

Más información:

  • JSON no está ordenado por company_id.
  • La matriz A podría tener más de un objeto con el mismo company_id
  • Estoy usando Javascript (en una aplicación Vue.js), no necesito admitir navegadores antiguos
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Espero que esto funcione para tí. Hazme saber si tienes alguna pregunta.

 const arrayOne = [ { "order_name": "Foo", "company_id": "112233" }, { "order_name": "Bar", "company_id": "123456" } ]; const arrayTwo = [ { "company_id":"112233", "name":"ACME company", }, { "company_id":"123456", "name":"John Doe Inc.", } ]; const [source, target] = arrayOne.length > arrayTwo.length ? [arrayOne, arrayTwo] : [arrayTwo, arrayOne]; const merged = source.map(object => { // Assuming that in the 2nd array, the match is only found 1 time and it EXISTS. const matched = target.find(element => element.company_id === object.company_id); // Merge both objects together return { ...object, ...matched }; }); console.log(merged);

about 4 years ago · Juan Pablo Isaza Relatório

0

Al tener JSON:

 const jsonA = [ { "order_name": "Foo", "company_id": "112233" }, { "order_name": "Bar", "company_id": "123456" } ]; const jsonB = [ { "company_id":"112233", "name":"ACME company", }, { "company_id":"123456", "name":"John Doe Inc.", } ];

puede fusionar mapas en el tercer mapa con algo como esto:

 const transform = (data, current={}) => data.reduce((prev, company) => { if(!prev[company['company_id']]) prev[company['company_id']] = {}; prev[company['company_id']] = {...prev[company['company_id']], ...company} return prev; }, current); let jsonMap = transform(jsonA, {}); jsonMap = transform(jsonB, jsonMap); let jsonC = Object.keys(jsonMap).map(companyId => jsonMap[companyId] ); console.log(jsonC);
about 4 years ago · Juan Pablo Isaza Relatório

0

En JavaScript moderno común, puede hacer esto como mencionó con funciones de orden superior como map , filter , etc.:

 const arrayA = [ { "order_name": "Foo", "company_id": "112233" }, { "order_name": "Bar", "company_id": "123456" } ] const arrayB = [ { "company_id":"112233", "name":"ACME company", }, { "company_id":"123456", "name":"John Doe Inc.", } ] const mergeAB = arrayA.map( companyA => { const matched = arrayB.find(companyB => companyB.company_id === companyA.company_id) if(matched) { return {...companyA, ...matched} } else { // return companyA element or customize it with your case } } ) console.log(mergeAB)

Nota 1 : la complejidad del método Array.find() es O(n) y la complejidad del método Array.map() es O(n)

Nota 2: la eficiencia es algo importante, pero no en todas las situaciones. a veces necesita hacer este tipo de iteración una vez o para un tamaño de matriz pequeño, por lo que no debe preocuparse por el rendimiento.

Nota 3: puede comparar la respuesta y encontrar su mejor solución ya que no conocemos todo su código y aplicación.

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