Diga, tengo una matriz que se ve así:
var playlist = [
{artist:"Herbie Hancock", title:"Thrust"},
{artist:"Lalo Schifrin", title:"Shifting Gears"},
{artist:"Faze-O", title:"Riding High"}
];
¿Cómo puedo mover un elemento a otra posición?
Quiero moverme, por ejemplo, {artist:"Lalo Schifrin", title:"Shifting Gears"}
hasta el final.
Intenté usar empalme, así:
var tmp = playlist.splice(2,1);
playlist.splice(2,0,tmp);
Pero no funciona.
javascript
arrays
sorting
Wurlitzer
fuente
fuente
Respuestas:
La sintaxis de
Array.splice
es:Dónde:
Esto significa que
splice()
se puede usar para eliminar elementos, agregar elementos o reemplazar elementos en una matriz, según los argumentos que pase.Tenga en cuenta que devuelve una matriz de los elementos eliminados.
Algo agradable y genérico sería:
Entonces solo usa:
Diagrama:
fuente
Si conoce los índices, podría intercambiar fácilmente los elementos, con una función simple como esta:
Los índices de matriz son solo propiedades del objeto de matriz, por lo que puede intercambiar sus valores.
fuente
Aquí hay una versión inmutable para aquellos que estén interesados:
fuente
Cambie 2 a 1 como primer parámetro en la llamada de empalme al eliminar el elemento:
fuente
Con ES6 puede hacer algo como esto:
fuente
Siempre puede usar el método de clasificación, si no sabe dónde está el registro en este momento:
fuente
return +(a.artist == "Lalo Schifrin")
EDITAR: Por favor, consulte la respuesta de Andy, ya que su respuesta fue la primera y esta es solo una extensión
Sé que esta es una pregunta antigua, pero creo que vale la pena incluirla
Array.prototype.sort()
.Aquí hay un ejemplo de MDN junto con el enlace
Afortunadamente, no solo funciona con números:
Noté que los está ordenando por nombre:
Tenga en cuenta que si se quería ordenarlos por apellido tendría que o bien tienen una clave para ambos
first_name
ylast_name
, o hacer un poco de magia de expresiones regulares, que yo no puedo hacer XDEspero que ayude :)
fuente
Prueba esto:
fuente
Si solo desea mover un elemento desde una posición arbitraria al final de la matriz, esto debería funcionar:
Si desea mover varios elementos desde una posición arbitraria hasta el final, puede hacer:
Si desea mover varios elementos de una posición arbitraria a una posición arbitraria, intente:
fuente
Como solución mutable simple, puede llamar a splice dos veces seguidas:
Por otro lado, una solución inmutable simple podría usar slice ya que este método devuelve una copia de una sección de la matriz original sin cambiarla:
fuente
Reordenar su trabajo de esta manera
Espero que esto funcione
fuente