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

121
Vistas
Compare dos matrices y, si coincide, pase al objeto

La función ha probado cada elemento de la primera matriz utilizando la devolución de llamada para ver si la salida coincide con el elemento correspondiente (por índice) de la segunda matriz. Si hay una coincidencia, el elemento de la primera matriz se convierte en una clave en un objeto y el elemento de la segunda matriz se convierte en el valor correspondiente.

 function objOfMatches(arr1, arr2, callback){ let obj ={}; let newArr1 = arr1.toString(); newArr1 = callback(newArr1); newArr1 = newArr1.split(","); arr1.forEach(el=>{ if((callback(newArr1) === arr2[el])) obj[arr1[el]] = arr2[el]; }); return obj; }

El problema que tengo es que cuando llamo a una función como esta:

 const arr1 = ['hi', 'howdy', 'bye', 'later', 'hello']; const arr2 = ['HI', 'Howdy', 'BYE', 'later', 'HELLO']; function uppercaser(str) { return str.toUpperCase(); }; console.log(objOfMatches(arr1, arr2, uppercaser));

Da un error (Error de tipo en la línea 18: str.toUpperCase no es una función).

Sin embargo, funciona perfectamente bien si se usa con un bucle FOR en lugar de .forEach como este:

 for(let i=0; i<arr1.length; i++){ if(callback(arr1[i]) === arr2[i]){ obj[arr1[i]] = arr2[i]; } }

¿Puede alguien explicarme en un lenguaje de nivel principiante de JS por qué no funciona?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En resumen, newArr1 se ha convertido en una matriz cuando llamó a .toUpperCase() , de ahí el TypeError. Echemos un vistazo más de cerca a su función:

 function objOfMatches(arr1, arr2, callback) { let obj = {}; let newArr1 = arr1.toString(); // string newArr1 = callback(newArr1); // string newArr1 = newArr1.split(','); // array arr1.forEach((el) => { if (callback(newArr1) === arr2[el]) { // Error, newArr1 is an array and doesn't have the method .toUpperCase() obj[arr1[el]] = arr2[el]; } }); return obj; }

Sin mencionar que la lógica de su función es incorrecta. Según su descripción, debería ser más como esto:

 function objOfMatches(arr1, arr2, callback) { let obj = {}; arr1.forEach((el, index) => { if (callback(el) === arr2[index]) { obj[el] = arr2[index]; // Eg { 'hi': 'HI' } } }); return obj; }

La versión del bucle for es realmente correcta, por lo que funciona:

 function objOfMatches(arr1, arr2, callback) { let obj = {}; for(let i=0; i<arr1.length; i++){ if(callback(arr1[i]) === arr2[i]){ // Correct, arr1 is an array of string so each string will have .toUpperCase() obj[arr1[i]] = arr2[i]; } } return obj; }
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