Como posso remover um objeto de uma matriz? Desejo remover o objeto que inclui o nome Kristian
de someArray
. Por exemplo:
someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];
Eu quero alcançar:
someArray = [{name:"John", lines:"1,19,26,96"}];
javascript
arrays
Clem
fonte
fonte
Respostas:
Você pode usar vários métodos para remover itens de uma matriz:
Se você deseja remover o elemento na posição
x
, use:Ou
Resposta ao comentário de @ chill182 : você pode remover um ou mais elementos de uma matriz usando
Array.filter
ouArray.splice
combinado comArray.findIndex
(consulte MDN ), por exemplofonte
findIndex
resultado antes de usá-losplice
. Se não houver elementos na matriz que correspondam à condiçãofindIndex
, retornará-1
e colocar isso diretamentesplice
resultará em uma exclusão arbitrária do último elemento da matriz.Eu recomendo usar lodash.js ou sugar.js para tarefas comuns como esta:
na maioria dos projetos, ter um conjunto de métodos auxiliares fornecidos por bibliotecas como essas é bastante útil.
fonte
someArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; });
someArray = someArray.filter(function(e) { return e.Name !== "Kristian"; });
A solução limpa seria usar
Array.filter
:O problema disso é que ele não funciona no IE <9. No entanto, você pode incluir código de uma biblioteca Javascript (por exemplo, underscore.js ) que implementa isso em qualquer navegador.
fonte
someArray = someArray.filter(function(el) { return el.Name != "Kristian"; });
endereços que, não?Que tal agora?
fonte
$.each()
armazena em cache o comprimento da matriz antes de fazer o loop, por isso, se você remover um elemento,$.each()
será executado no final da matriz (agora mais curta). (EntãosomeArray[i]
seráundefined
eundefined.name
irá falhar.)Sua "matriz", como mostrado, é uma sintaxe JavaScript inválida. Os colchetes
{}
são para objetos com pares de nome / valor de propriedade, mas os colchetes[]
são para matrizes - assim:Nesse caso, você pode usar o
.splice()
método para remover um item. Para remover o primeiro item (índice 0), diga:Se você não conhece o índice, mas deseja pesquisar na matriz para encontrar o item com o nome "Kristian" para remover, é possível:
EDIT: Acabei de perceber que sua pergunta está marcada com "jQuery", para que você possa tentar o
$.grep()
método :fonte
$.grep()
? Isso não adiciona muito neste exemplo, onde sim, eu poderia ter colocado!=
, mas em outros casos você já pode ter uma função definida que faz o teste oposto ao que você deseja saudar, então, em vez de definir um função adicional, você pode simplesmente usar essa sobrecarga para inverter os resultados.function isEven(num) { return num%2===0 }
. Você pode usar$.grep(someArray, isEven)
para obter apenas os números pares da matriz ou$.grep(someArray, isEven, true)
fazer o oposto e obter os valores pares.ES2015
Ele removerá John !
fonte
Você pode usar array.filter ().
por exemplo
Funções de seta:
fonte
Eu fiz uma função dinâmica pega os objetos Array, Key e value e retorna a mesma matriz depois de remover o objeto desejado:
Exemplo completo: DEMO
fonte
Esta é uma função que funciona para mim:
fonte
Você também pode tentar fazer algo assim:
fonte
fonte
Use a função de emenda em matrizes. Especifique a posição do elemento inicial e o comprimento da subsequência que você deseja remover.
fonte
Vote no UndercoreJS para um trabalho simples com matrizes.
A função _.without () ajuda a remover um elemento:
fonte
Com a função de seta ES 6
fonte
A solução mais simples seria criar um mapa que armazene os índices de cada objeto pelo nome, assim:
fonte
Embora isso provavelmente não seja apropriado para essa situação, descobri outro dia que você também pode usar a
delete
palavra-chave para remover um item de uma matriz, se não precisar alterar o tamanho da matriz, por exemplo.fonte
Esta resposta
não está funcionando para vários registros que atendem à condição. Se você tiver dois desses registros consecutivos, apenas o primeiro será removido e o outro será ignorado. Você tem que usar:
em vez de .
fonte
Parece haver um erro na sintaxe da sua matriz, supondo que você queira dizer uma matriz em oposição a um objeto, Array.splice é seu amigo aqui:
fonte
Você também pode usar a função de mapa .
fonte
Você também pode usar
some
:fonte
É isso que eu uso.
Então é tão simples quanto dizer
Substitua qualquer número no lugar de três. Após a saída esperada deve ser:
fonte
Se você deseja remover todas as ocorrências de um determinado objeto (com base em alguma condição), use o método de emenda de javascript dentro de a para o loop.
Como a remoção de um objeto afetaria o comprimento da matriz, diminua o contador em uma etapa, para que a verificação do comprimento permaneça intacta.
O snippet de código acima remove todos os objetos com idade superior a 20.
fonte
Use a função splice () do javascript.
Isso pode ajudar: http://www.w3schools.com/jsref/jsref_splice.asp
fonte
splice (i, 1) onde i é o índice incremental da matriz removerá o objeto. Mas lembre-se de que a emenda também redefinirá o comprimento da matriz, portanto, atente para 'indefinido'. Usando seu exemplo, se você remover 'Kristian', na próxima execução dentro do loop, terei 2, mas someArray terá um comprimento de 1; portanto, se você tentar remover "John", receberá um erro "indefinido" . Uma solução para isso, embora não seja elegante, é ter um contador separado para acompanhar o índice do elemento a ser removido.
fonte
Retorna apenas objetos da matriz cuja propriedade
name
não é "Kristian"Demo:
fonte
Conceitos usando o Kendo Grid
fonte
Eu acho que as respostas são muito ramificadas e atadas.
Você pode usar o caminho a seguir para remover um objeto de matriz que corresponda ao objeto fornecido no jargão moderno do JavaScript.
fonte
Se você deseja acessar e remover o objeto de uma matriz, basta tentar algo como isto.
fonte