Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

104
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda