Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

171
Views
JavaScript. Filtrando una matriz con el método Splice()

necesito escribir una funcion

filterRangeInPlace(arr, a, b)

que toma una matriz y dos números y elimina todos los elementos de la matriz que no están dentro del rango a a b . Así que el cheque parece

un ≤ arr[i] ≤ segundo

Quiero hacerlo con el método for loop and splice. Pero no puedo entender por qué la función mantiene algunos elementos fuera del rango, en mi caso a continuación, es el número 3 . Esta no es una tarea casera o lo que sea, solo estoy practicando métodos de matriz. Aquí está mi código:

 let myArr = [1, 3, 8, 3, 9, 5, 3, 4, 10, 7, 6, 1] function filterRangeInPlace( arr, a, b ) { for ( i = 0; i < arr.length; i++ ) { if ( arr[i] < a || arr[i] > b ) { arr.splice(i, 1) } } } filterRangeInPlace(myArr, 4, 9) console.log(myArr) // [3, 8, 9, 5, 4, 7, 6]

Entiendo que me metí con el índice en alguna parte, pero no puedo averiguar dónde y cómo, ya que el resto funciona bien. ¡Gracias!

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Debería comenzar a iterar desde el final de la matriz si está usando empalme aquí y subir al primer elemento como:

 for (i = arr.length - 1; i >= 0; i--) {

Digamos que está eliminando el primer elemento, es decir, 1 en la posición 0 , luego de eliminar la matriz será

 [3, 8, 3, 9, 5, 3, 4, 10, 7, 6, 1]

y en ese momento la i se incrementa y se convierte en 1 , por lo que ahora apuntará a 8 como índice 1 .

Entonces, usar splice omitirá algunos de los pasos

 let myArr = [1, 3, 8, 3, 9, 5, 3, 4, 10, 7, 6, 1]; function filterRangeInPlace(arr, a, b) { for (i = arr.length - 1; i >= 0; i--) { if (arr[i] < a || arr[i] > b) { arr.splice(i, 1); } } } filterRangeInPlace(myArr, 4, 9); console.log(myArr);

about 4 years ago · Juan Pablo Isaza Report

0

Cuando usa splice y todavía está en el mismo ciclo, omite algunos índices (porque splice elimina una cantidad de elementos, por lo que se cambian los índices).

En su ejemplo, el 1 , que es el primero, se elimina, por lo que 3 se convierte en el primero, pero luego salta al segundo ( i++ en el ciclo). No verifica dos veces el mismo índice.

Recomendaría usar el método de filter para hacer eso, o simplemente poner i-- en la línea después del splice .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!