es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

JavaScript. Filtrando un array con el método Splice() En JavaScript, el método Splice() se utiliza para filtrar un array o para eliminar elementos especificados de un array. La sintaxis básica del método Splice() es la siguiente: array.splice(startIndex, deleteCount, item1, item2, …) – El parámetro “startIndex” especifica la posición inicial en la que se realizarán los cambios en el array. – El parámetro “deleteCount” especifica el número de elementos que se eliminarán a partir de “startIndex”. – Los parámetros “item1”, “item2”, etc., son opcionales y se utilizan para especificar los elementos que se agregarán en lugar de los elementos eliminados. Aquí hay un ejemplo de cómo usar el método Splice() para filtrar un array: const numbers = [1, 2, 3, 4, 5]; // Filtrar el array para obtener solo los números mayores a 3 const filteredNumbers = numbers.splice(3); console.log(filteredNumbers); // Output: [4, 5] En este ejemplo, el método Splice() se utiliza para eliminar los primeros tres elementos del array “numbers” y devolver un nuevo array llamado “filteredNumbers” que contiene los elementos restantes. El método Splice() también se puede utilizar para filtrar un array utilizando otros criterios, como eliminar elementos que cumplan cierta condición. Para ello, se pueden utilizar estructuras de control adicionales, como bucles o condicionales, dentro de la función callback del método Splice(). Espero que esta explicación te sea útil para entender cómo utilizar el método Splice() para filtrar un array en JavaScript. Si tienes alguna pregunta adicional, no dudes en expresarla.

Necesito escribir una función.

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. Por lo tanto, la comprobación se ve así:

a ≤ arr[i] ≤ b

Quiero hacerlo usando el bucle for y el método splice. Pero no puedo entender por qué la función mantiene algunos elementos fuera del rango, en mi caso, es el número 3. Esto no es una tarea para casa ni nada parecido, solo estoy practicando los métodos de las matrices. 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 equivoqué con el índice en algún lugar, pero no puedo descubrir dónde y cómo, ya que el resto funciona bien. ¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que el método splice modifica el array original y modifica los índices de los elementos restantes. Cuando se elimina un elemento del array, los índices de los elementos que vienen después se desplazan para llenar el espacio vacío, y la longitud del array también se reduce. Esto hace que el índice del bucle i salte elementos que vienen después de un elemento eliminado.

    Para solucionar esto, puedes iterar a través del array en orden inverso usando un índice decreciente. Esto asegura que el índice del elemento actual no se vea afectado por la eliminación de elementos que vienen después. Aquí está la función modificada:

    function filterRangeInPlace(arr, a, b) {
      for (let i = arr.length - 1; i >= 0; i--) {
        if (arr[i] < a || arr[i] > b) {
          arr.splice(i, 1);
        }
      }
    }
    

    Con este cambio, la función debería eliminar correctamente todos los elementos que no están dentro del rango a a b.

Comments are closed.