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

257
Visualizações
¿El método Array.prototype.forEach() permite omitir iteraciones modificando el parámetro de índice?

Estoy tratando de crear una función que duplique cada 5 que se encuentran en la matriz proporcionada usando Array.prototype.forEach() y Array.prototype.splice():

 function duplicateFives(array) { function multiplyFives (element, index) { if (element === 5) { array.splice(index, 0, 5); index++; } } array.forEach(multiplyFives); return array; }

Sin embargo, parece que modificar el segundo parámetro del método .forEach no omite iteraciones (elementos). ¿Es esto correcto, o estoy cometiendo un error diferente?

Mdn no parece confirmar ni especificar ninguna funcionalidad relacionada con el parámetro de índice.

about 4 years ago · Santiago Gelvez
3 Respostas
Responde à pergunta

0

Si desea dividir una matriz en fragmentos de n elementos, Array.reduce puede ser una mejor idea.

 const arr = [1,8,4,5,7,8,5,9,12,5,98,97,32,]; let chunks = arr.reduce( (a, v, i) => i && i%5 === 0 ? [...a, arr.slice(i-5, i)] : a, []); // remaining elements const remain = arr.slice(chunks.flat().length); if (remain.length) { chunks = chunks.concat([remain]); } console.log(`${JSON.stringify(chunks)}`);

about 4 years ago · Santiago Gelvez Relatório

0

El index está limitado al alcance de la función multiplyFives() y no modificará el índice del bucle array.forEach() .

Con su código, cuando un nuevo elemento se empalma en la matriz en el siguiente índice, el array.forEach() verá ese elemento en la siguiente iteración y continuará empalmando el mismo elemento por la longitud restante de la matriz.

Se requiere un indicador de duplicate booleano para permitir la duplicación de 5 valores adyacentes e ignorar los valores que ya estaban duplicados.

Aquí está el código JavaScript correcto con comentarios que explican cada línea modificada.

 const array = [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10] console.log('Array without duplicated 5 values') console.log(array) function duplicateFives(array) { // Set a boolean flag to determine if a duplicate 5 should be made let duplicate = true function multiplyFives (element, index) { if (element === 5) { if (duplicate === true) { // Add a duplicate 5 to the array if the current element isn't from a previous duplication array.splice(index, 0, 5) // Prevent the duplicated 5 from duplicating itself in the next iteration duplicate = false } else { // Allow duplication for the next element with a value of 5 in the array duplicate = true } } } array.forEach(multiplyFives) return array } duplicateFives(array) console.log('Array with duplicated 5 values') console.log(array)

about 4 years ago · Santiago Gelvez Relatório

0

No puede modificar una matriz mientras la itera con un bucle forEach, que solo proporciona variables locales, como el elemento actual y el índice. Esas son solo variables locales, modificarlas no afecta el ciclo dentro de forEach.

Lo que debe hacer es buscar índices para modificar y modificar la matriz en sí.

algo como:

 function duplicateFives(array) { array.map((cur,index)=>cur === 5 ? index : undefined) // find indexes of 5's .filter(item=>item !== undefined) // filter undefined's .forEach((item,index) => array.splice(item + index, 0, 5)); // modify array for those items. // Adding new items to array changes indexes, take that into account. return array; } console.log(duplicateFives([1, 2, 3, 4, 5, 6, 7, 5, 8, 9, 10]));
about 4 years ago · Santiago Gelvez 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