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

143
Visualizações
Elimine elementos de matriz particulares y empújelos hacia la parte posterior de la matriz

Intentando eliminar todos los 0 de una matriz y devolverlos en la misma matriz

Entonces, por ejemplo, si tengo esto como una matriz

 let arrThree = [9,0,9,1,2,1,1,3,1,9,0,0,9,0,0,0,0,0,0,0]

obtendría esto:

 let arrThree = [9,9,9,1,2,1,1,3,1,9,9,0,0,0,0,0,0,0,0,0,0,0]

Esto es lo que escribí:

 var remove = function (arr) { let test = []; for(let i = 0; i < arr.length; i++){ arr[i] === 0 ? test.push(arr.splice(i,1)) : false //if i is 0 then we want to push that into another array } arr.push(...test) return [].concat(...arr) }

Cuando ejecuto esta función me sale esto

 [ 9, 9, 1, 2, 1, 1, 3, 1, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]

¿No estoy seguro de dónde me estoy equivocando?

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

El problema con su código es que cambia la longitud de arr con arr.splice(i,1) . Esto estropea la condición del ciclo i < arr.length .

Para corregir su código, puede recorrer hacia atrás la matriz. Entonces, a medida que la longitud de la matriz se acorta, i sigue siendo válida.

 let arrThree = [9,0,9,1,2,1,1,3,1,9,0,0,9,0,0,0,0,0,0,0]; var remove = function(arr) { let test = []; for(let i = arr.length - 1; i >= 0; --i) { if (arr[i] === 0) test.push(arr.splice(i, 1)[0]); } return arr.concat(test); } console.log(remove(arrThree));

Hay algunas otras maneras de hacer esto. Una es usar el filter para crear 2 matrices, una sin 0 y otra con 0 y unirlas:

 let arrThree = [9,0,9,1,2,1,1,3,1,9,0,0,9,0,0,0,0,0,0,0]; let remove = (arr) => arr.filter(i => i != 0).concat(arr.filter(i => i == 0)); console.log(remove(arrThree));

about 4 years ago · Juan Pablo Isaza Relatório

0

Solo necesita dos iteraciones, una para encontrar valores distintos de cero y otra para poner ceros en el lado derecho hasta el final de la matriz. No necesita empujar o empalmar matrices.

 const move0 = array => { let i = 0, j = 0; while (i < array.length) { if (array[i]) array[j++] = array[i]; i++; } while (j < array.length) { array[j] = '#'; // in reality it is zero j++; } }, array = [9, 0, 9, 1, 2, 1, 1, 3, 1, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0]; move0(array) console.log(...array);

about 4 years ago · Juan Pablo Isaza Relatório

0

Si no necesita ordenar los elementos distintos de cero, una solución bastante eficiente sería intercambiar el 0 más a la izquierda con el elemento distinto de cero más a la derecha. Una vez que sus índices para rastrear dónde se encuentra a la izquierda y a la derecha se crucen, sabrá que ha terminado.

 function moveZeros(arr) { let i = 0; let j = arr.length - 1; while(i < j) { // Found a 0 to the left of a non-zero, swap. if(arr[i] == 0 && arr[j] != 0) { let tmp = arr[j]; arr[j] = arr[i]; arr[i] = tmp; } // Find a zero if(arr[i] != 0) { i++; } // Find a non-zero if(arr[j] == 0) { j--; } } return arr; } console.log(moveZeros([1,2,0,3,0,0,0])); console.log(moveZeros([9,0,9,1,2,1,1,3,1,9,0,0,9,0,0,0,0,0,0,0]));

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