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

154
Views
Cómo fusionar dos matrices de objetos

ingrese la descripción de la imagen aquí

 array1 = [ { "name": { "common": "Afghanistan", "official": "Islamic Republic of Afghanistan", "capital": [ "Kabul" ] } }]
 array2 = [ { "capital": [ "Kabul" ], "population": 2837743 }];

quiero hacerlo

 [{ "name": { "common": "Afghanistan", "official": "Islamic Republic of Afghanistan", "capital": [ "Kabul" ], "population": 2837743 } }]

Quiero fusionar una matriz de objetos y hacer una matriz. Intenté hacerlo con el método de filtro y el método de búsqueda, pero no puedo resolver el problema.

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

0

Primero procese los datos de array2 y construya cualquier objeto con clave como capitolio y valor como objeto. Use map y array1 y agregue la información del capitolio correspondiente de los datos del proceso (track2)

 const array1 = [ { name: { common: "Afghanistan", official: "Islamic Republic of Afghanistan", }, capital: ["Kabul"], }, ]; const array2 = [ { capital: ["Kabul"], population: 2837743, }, ]; const track2 = {}; array2.forEach(({ capital: [city], ...rest }) => (track2[city] = rest)); const result = array1.map((item) => ({ ...item, ...track2[item.capital?.[0]], })); console.log(result)

about 4 years ago · Juan Pablo Isaza Report

0

Hay algunos problemas al tratar de hacer esto porque necesitará una forma de manejar la combinación desde una perspectiva semántica. Debe elegir en qué campos coincidirá la combinación. Por ejemplo, si dos países tienen la misma población, no desea que se emparejen y luego se fusionen.

También debe tener en cuenta y planificar la ocurrencia de más de dos elementos coincidentes. Un problema que viene inmediatamente a la mente es si los dos objetos coinciden pero tienen información contradictoria. Esto podría suceder incluso si realmente son compatibles. Las poblaciones cambian con el tiempo. Incluso cosas tan rígidas como el capital cambian.

Algorítmicamente, hay dos enfoques para el emparejamiento que sugeriré. El más simple de los dos es tener una lista de posibles campos en los que desea hacer coincidir los objetos. Luego puede crear una matriz (Diccionario o hashmap en otros idiomas) que ingresa por el valor visto hasta ahora.

 var capital_map = [] for(country in countries1 + countries2){ if (capital_map[country.capital]){ //We have a match that we can then handle }else{ //set up for possible matches down the array capital_map[country.capital] = country }

En el ejemplo anterior, solo estamos haciendo coincidir la capital. Puede expandir esto de modo que si alguno de los muchos campos coincide, fusionemos los dos elementos o que al menos n de N campos coincidan.

La otra forma que iba a sugerir es crear una función que defina alguna coincidencia ponderada. Por ejemplo, qué fracción de los campos que se superponen son los mismos, con cada campo ponderado en función de la importancia, por lo que la población sería de baja importancia pero el capital podría ser de gran importancia.

No sé si desea profundizar en el anidamiento de la coincidencia de las dos matrices, por ejemplo, con un nombre frente a un nombre oficial, pero espero que al menos tenga una mejor idea de los tipos de técnicas que podría usar para que. Es posible que haya tenido la matriz de mayúsculas porque espera problemas con las entidades que pasan la coincidencia pero tienen campos superpuestos y no quería preocuparse por una resolución. (Como simplemente tomar el promedio de la población) Si tiene la intención de expandir esto a más de dos fuentes de datos, más de dos matrices, puede hacer cosas como votar donde cada fuente vota por su respuesta. Si dos fuentes dicen que la capital es Brasilia y solo una de las tres dice Río, entonces puedes ir con Brasilia.

about 4 years ago · Juan Pablo Isaza Report

0

Puedes hacer algo como esto (dejé capital como una matriz, pero sería más simple si no lo fuera):

 const arr1 = [ { name: { common: 'Afghanistan', official: 'Islamic Republic of Afghanistan', }, capital: ['Kabul'], }, { name: { common: 'Albania', official: 'Republic of Albania', }, capital: ['Tirana'], }, ]; const arr2 = [ { capital: ['Tirana'], population: 2845955 }, { capital: ['Kabul'], population: 2837743 }, ]; const populationByCapital = new Map(); for (let el of arr2) { populationByCapital.set(el.capital[0], el.population); } const arr3 = arr1.map((el) => { return { ...el, population: populationByCapital.get(el.capital[0]) }; }); console.log(arr3);

esto debería darte:

 [ { name: { common: 'Afghanistan', official: 'Islamic Republic of Afghanistan' }, capital: [ 'Kabul' ], population: 2837743 }, { name: { common: 'Albania', official: 'Republic of Albania' }, capital: [ 'Tirana' ], population: 2845955 } ]

Tenga en cuenta que podría romperse si hay dos países con los mismos nombres de capital.


Editar

Ahora veo que estaba usando la API de restcountries.com , por lo que cambiar el capital a un escalar está fuera de su control. Y hay una razón por la que es una matriz: Sudáfrica tiene 3 capitales. El código aún debería funcionar porque es la misma API y los 3 se enumeran en el mismo orden en ambos puntos finales.

Pero hay un par de complicaciones. El país de la isla Bouvet aparentemente no tiene capital, por lo que la matriz estará vacía, y el país de la isla Norfolk y Jamaica tienen "Kingston" como capital. Para abordar estos dos problemas, puede cambiar la clave para incluir el nombre del país junto con la capital:

 const populationByCapital = new Map(); for (let el of arr2) { populationByCapital.set(el.capital[0] + el.name.common, el.population); } const arr3 = arr1.map((el) => { return { ...el, population: populationByCapital.get(el.capital[0] + el.name.common), }; });
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!