Tengo dos matrices con objetos que contienen países y su código de país. Una de las matrices tiene los países en inglés y también tiene una clave con el código iso del país. Parece que:
[{ "name": "Denmark", "dialCode": "+45", "isoCode": "DK", }, { "name": "Germany", "dialCode": "+49", "isoCode": "DE", }]La otra matriz tiene los nombres de los países en danés y el código de marcación pero sin el código iso.
[{ "name": "Danmark", "dialCode": "+45", }, { "name": "Tyskland", "dialCode": "+49", }]Ahora quiero mover/copiar el isoCode de la matriz en inglés al danés, que coincida con el dialCode. Pero estoy un poco perdido en cómo hacer esto.
tengo una coincidencia con esto
let result = this.dkList.filter(country1 => this.countryList.some(country2 => country2.dialCode === country1.dialCode.replace('00 ', '+').trim()))Mi resultado esperado debería ser
[{ "name": "Danmark", "dialCode": "+45", "isoCode": "DK" }, { "name": "Tyskland", "dialCode": "+49", "isoCode": "DE" } ]El método .filter() se usa para eliminar elementos de una matriz, que no es lo que está buscando hacer aquí, sino que está buscando mapear (es decir, transformar) sus datos.
Primero puede crear un Mapa llamado isoLookup desde su primera matriz que crea claves basadas. en el dialCode y los valores basados en el isoCode en su matriz. Luego puede usar este Mapa para obtener el código ISO usando un dialCode . Una vez que haya creado la búsqueda de mapa, puede usar .map() en su segundo arr2 para asignar sus objetos a nuevos objetos con una propiedad isoCode , que contiene un valor obtenido de la búsqueda de mapa:
const arr1 = [{ "name": "Denmark", "dialCode": "+45", "isoCode": "DK", }, { "name": "Germany", "dialCode": "+49", "isoCode": "DE", }]; const arr2 = [{ "name": "Danmark", "dialCode": "+45", }, { "name": "Tyskland", "dialCode": "+49", }]; const isoLookup = new Map(arr1.map(obj => [obj.dialCode, obj.isoCode])); const res = arr2.map(obj => ({...obj, isoCode: isoLookup.get(obj.dialCode)})); console.log(res); La creación de un mapa para que sirva como una búsqueda permite que su código se escale bien, en lugar de realizar la búsqueda a través de arr1 para cada iteración de su método .map() .
Simplemente revise todos los elementos de la matriz, compare sus dialCodes y copie los isoCodes a la versión danesa.
const en = [...]; // array with english data const den = [...]; // array with danish data // it will work if en.length = den.length for (let i = 0; i < en.length; i++) { if (den[i].dialCode === en[i].dialCode) { // compare en & den dial codes den[i].isoCode = en[i].isoCode; } }Debido a que ambas listas contienen dialCode : con Array.prototype.reduce() puede crear un hash de arr1 basado en la propiedad dialCode y finalmente obtener el resultado de la lista Array.prototype.map() arr2
Código:
const arr1 = [{name: 'Denmark',dialCode: '+45',isoCode: 'DK',},{name: 'Germany',dialCode: '+49',isoCode: 'DE'}] const arr2 = [{name: ' Danmark',dialCode: '+45',},{name: 'Tyskland',dialCode: '+49'}] const hash = arr1.reduce((a, c) => ((a[c.dialCode] = c.isoCode), a), {}); const restult = arr2.map(c => ({ ...c, isoCode: hash[c.dialCode] })); console.log(restult);