¿Cómo intercambiar dos elementos de una matriz con elementos vacíos en JavaScript?
Tengo un array y quiero intercambiar dos elementos en el array. Si el array no está vacío, simplemente puedo hacer lo siguiente:
const swap = (arr, a, b) => {
const temp = arr[a]
arr[a] = arr[b]
arr[b] = temp
}
y la función intercambiará correctamente el valor de los índices a
y b
en el array arr
.
Sin embargo, si el array tiene algunos elementos vacíos, como [1, , , ,]
, el resultado del intercambio será [undefined, vacío, 1, vacío]
, mientras que el resultado esperado debería ser [vacío × 2, 1, vacío]
. ¿Cómo modifico la función swap
para que el resultado sea correcto? ¿O hay alguna forma de que un índice específico sea vacío en un array?
También he intentado lo siguiente:
const swap = (arr, a, b) => {
const temp = arr[a]
arr.splice(a, 1, arr[b])
arr.splice(b, 1, temp)
}
Problema original:
Tengo un array let arr = [1, , , ,]
(que se mostrará [1, vacío × 3]
en la consola) con longitud 4, y quiero mover el primer elemento al tercero, es decir: [vacío × 2, 1, vacío]
. ¿Cómo lo logro?
He intentado usar splice
y asignar directamente el valor al array pero no funcionan.
davy.ai
Para intercambiar dos elementos en un arreglo, se puede utilizar la función
swap
mencionada. Sin embargo, cuando un arreglo tiene elementos vacíos, la funciónswap
no funcionará como se espera porque los elementos vacíos serán reemplazados por valoresundefined
.Para manejar los elementos vacíos, podemos modificar la función
swap
para verificar si los valores que están siendo intercambiados están vacíos. Si están vacíos, sus posiciones en el arreglo pueden intercambiarse simplemente sin intercambiar sus valores. Esto se puede hacer utilizando el operadordelete
para eliminar el elemento de su posición original y establecerlo comoundefined
.Para mover un elemento en el arreglo de una posición a otra, se puede utilizar el método
splice
. El métodosplice
puede eliminar uno o más elementos de un arreglo y/o insertar nuevos elementos en el arreglo.Para mover el primer elemento de
let arr = [1, , , ,]
a la tercera posición, se puede utilizar el siguiente código:Aquí,
arr.splice(0, 1)
elimina el primer elemento del arreglo y lo devuelve como un arreglo.[0]
se utiliza para obtener el primer elemento del arreglo devuelto. Luego,arr.splice(2, 0, ...)
inserta el primer elemento en la tercera posición sin eliminar ningún elemento. El...
se utiliza para desplegar el arreglo devuelto en argumentos individuales. El resultado es[empty × 2, 1, empty]
.Hay que tener en cuenta que no hay una forma incorporada de hacer que un índice específico sea vacío en un arreglo. Se puede utilizar el operador
delete
para eliminar un elemento de un arreglo, pero esto creará un espacio vacío en el arreglo y cambiará la longitud del arreglo. Se recomienda utilizarnull
oundefined
para representar elementos vacíos en un arreglo.