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

109
Vistas
cómo hacer una función que mire a través del primer argumento y devuelva una matriz que sea igual al segundo argumento

Estoy creando una función que mira a través de una matriz del primer argumento y devuelve una matriz con todos los objetos que coinciden con el segundo argumento. No sé qué está mal con mi código o cómo solucionarlo. te lo agradeceria si me puedes ayudar

 function whatIsInAName(collection, source) { const arr = []; // Only change code below this line for (let i=0; i<collection.length; i++) { if (source.hasOwnProperty(collection[i])) { arr.push(collection[i]) } } // Only change code above this line return arr; } whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Supongo que solo desea hacer coincidir el last campo en un objeto.

 function whatIsInAName(collection, source) { return collection.filter(({ last }) => last === source.last); } const result = whatIsInAName( [ { first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }, ], { last: "Capulet" } ); console.log(result);

Aquí solo estamos usando un método de filtro en la matriz de colección. El predicado de la función ( ({ last }) => last === source.last ) que estamos pasando en el filtro recibirá cada objeto de la colección y comprobará si source.last === received.last .

Es igual a la siguiente:

 function doesMatch(receivedObject) { if(receivedObject.last === source.last) return true; else return false; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Esta es la razón por la que source.hasOwnProperty no funciona como se esperaba:

Si ejecuta console.log , verá que está recorriendo los elementos de la collection que son objects .

Ejemplo:

 function whatIsInAName(collection, source) { const arr = []; // Only change code below this line for (let i=0; i<collection.length; i++) { console.log(collection[i]); if (source.hasOwnProperty(collection[i])) { arr.push(collection[i]) } } // Only change code above this line return arr; } whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });

Pero lo que realmente quiere hacer (si está verificando las propiedades, también conocidas como claves ) es recorrer las keys en cada object .

Para eso, necesitas un segundo bucle dentro del primero.

  • el primer ciclo recorrerá los object elements
  • el segundo ciclo recorrerá las keys en cada object element

Útilmente, puedes usar:

 Object.keys()

para devolver una matriz de object keys (para cada objeto) para recorrer.

Por lo tanto, su segundo ciclo puede ser otro for loop .

Ejemplo:

 function whatIsInAName(collection, source) { const arr = []; // Only change code below this line for (let i=0; i<collection.length; i++) { // Object Keys to Loop Through let myKeys = Object.keys(collection[i]); // Object Values let myValues = Object.values(collection[i]); for (let j = 0; j < myKeys.length; j++) { if ((source.hasOwnProperty(myKeys[j])) && (source[myKeys[j]] === myValues[j])) { arr.push(collection[i]) } } } console.log(arr); // Only change code above this line return arr; } whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });

about 4 years ago · Juan Pablo Isaza Denunciar

0

Este es el error:

 if (source.hasOwnProperty(collection[i])) { // ^ collection[i] is an object, not a property

Puede ser una idea usar Array.filter aquí. Algo como:

 const whatIsInAName = (collection, source) => { // compare for all keys keys in [source] const compare = (obj1, obj2, keys) => keys.filter( k => obj1[k] === obj2[k] ).length > 0; // filter using comparison method return collection.filter( r => compare(source, r, Object.keys(source)) ); }; const collection2CompareTo = [ { first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }]; // expect: [{ first: "Tybalt", last: "Capulet" }], const c1 = whatIsInAName(collection2CompareTo, { last: "Capulet" }); // expect: [{ first: "Romeo", last: "Montague" }] const c2 = whatIsInAName(collection2CompareTo, { first: "Romeo" }); // expect: [{ first: "Romeo", last: "Montague" }] const c3 = whatIsInAName(collection2CompareTo, { first: "Romeo", last: "Montague" }); // expect: [] const c4 = whatIsInAName(collection2CompareTo, { first: undefined, last: "Void" }); document.querySelector(`pre`).textContent = `c1: ${ JSON.stringify(c1, null, 2)}\nc2: ${ JSON.stringify(c2, null, 2)}\nc3: ${ JSON.stringify(c3, null, 2)}\nc4: ${ JSON.stringify(c4, null, 2)}`;
 <pre></pre>

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