Diga, eu tenho uma matriz parecida com esta:
var playlist = [
{artist:"Herbie Hancock", title:"Thrust"},
{artist:"Lalo Schifrin", title:"Shifting Gears"},
{artist:"Faze-O", title:"Riding High"}
];
Como posso mover um elemento para outra posição?
Eu quero passar, por exemplo, {artist:"Lalo Schifrin", title:"Shifting Gears"}
até o fim.
Tentei usar splice, assim:
var tmp = playlist.splice(2,1);
playlist.splice(2,0,tmp);
Mas não funciona.
javascript
arrays
sorting
Wurlitzer
fonte
fonte
Respostas:
A sintaxe de
Array.splice
é:Onde:
Isso significa que
splice()
pode ser usado para remover elementos, adicionar elementos ou substituir elementos em um array, dependendo dos argumentos que você passar.Observe que ele retorna uma matriz dos elementos removidos.
Algo bom e genérico seria:
Depois é só usar:
Diagrama:
fonte
Se você conhece os índices, pode facilmente trocar os elementos, com uma função simples como esta:
Os índices de matriz são apenas propriedades do objeto de matriz, portanto, você pode trocar seus valores.
fonte
Aqui está uma versão imutável para aqueles que estão interessados:
fonte
Altere 2 para 1 como o primeiro parâmetro na chamada de emenda ao remover o elemento:
fonte
Com ES6 você pode fazer algo assim:
fonte
Você sempre pode usar o método de classificação, se não souber onde o registro está no momento:
fonte
return +(a.artist == "Lalo Schifrin")
EDIT: Por favor, verifique a resposta de Andy, pois sua resposta veio primeiro e esta é apenas uma extensão de sua
Sei que é uma pergunta antiga, mas acho que vale a pena incluí-la
Array.prototype.sort()
.Aqui está um exemplo do MDN junto com o link
Felizmente, não funciona apenas com números:
Percebi que você os está ordenando pelo primeiro nome:
note que se você quisesse ordená-los pelo sobrenome, você teria que ter uma chave para ambos
first_name
&last_name
ou fazer alguma mágica regex, o que eu não posso fazer XDEspero que ajude :)
fonte
Experimente isto:
fonte
Se você quiser mover apenas um item de uma posição arbitrária para o final da matriz, isso deve funcionar:
Se quiser mover vários itens de alguma posição arbitrária para o final, você pode fazer:
Se você deseja mover vários itens de uma posição arbitrária para alguma posição arbitrária, tente:
fonte
Como uma solução mutável simples, você pode chamar splice duas vezes seguidas:
Por outro lado, uma solução inmutável simples poderia usar slice, pois esse método retorna uma cópia de uma seção da matriz original sem alterá-la:
fonte
Reordene seu trabalho desta maneira
Eu espero que isso funcione
fonte