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

93
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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