Eu tenho tentado várias abordagens sobre como encontrar um objeto em uma matriz, onde ID = var e, se encontrado, remover o objeto da matriz e retornar a nova matriz de objetos.
Dados:
[
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
Eu sou capaz de pesquisar a matriz usando jQuery $ grep;
var id = 88;
var result = $.grep(data, function(e){
return e.id == id;
});
Mas como posso excluir o objeto inteiro quando id == 88 e retornar dados como este:
Dados:
[
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
slice
função e um pequenofor
loop?Respostas:
Basta filtrar pelo predicado oposto:
fonte
slice
também não remove nada. Não sei ao que você está chegando. Se você tiver um problema específico, faça uma nova pergunta .data.filter(e => !ids.includes(e.id))
Aqui está uma solução se você não estiver usando o jquery:
fonte
findIndex()
e depoissplice(index, 1)
na matriz pai?arr = arr.filter( obj => obj.id !== id);
Você pode simplificar isso, e realmente não há necessidade de usar o jquery aqui.
Basta percorrer a lista, encontrar o ID correspondente, emendar e depois interromper para sair do loop
fonte
i=data.length; i > 0; i--
e não usebreak
.i = data.length
vai quebrar qualquerdata[i]
, deve ser algo comoi=data.length -1 ; i > -1; i--
Há um novo método para fazer isso no ES6 / 2015 usando o findIndex e o operador de spread de matriz:
Você pode transformá-lo em uma função para reutilização posterior como esta:
Dessa forma, você pode remover itens por chaves diferentes usando um método (e se não houver objeto que atenda aos critérios, você retornará a matriz original):
Ou você pode colocá-lo em seu Array.prototype:
E use-o desta maneira:
fonte
Supondo que os IDs sejam únicos e você só precisará remover o elemento que
splice
deve executar o truque:fonte
each(data,function(idx,ele)
. Vou cobrá-lo mais tarde para o 30 min I desperdiçado descobrir isso :)Se você estiver usando jQuery, use jQuery.grep assim:
Usando ES5 Array.prototype.filter :
fonte
jQuery
mapa como um filtro.Talvez você esteja procurando
$.grep()
função:fonte
sift
é um poderoso filtro de coleção para operações como essa e muito mais avançadas. Funciona do lado do cliente no navegador ou do servidor no node.js.Ele suporta filtros como
$in
,$nin
,$exists
,$gte
,$gt
,$lte
,$lt
,$eq
,$ne
,$mod
,$all
,$and
,$or
,$nor
,$not
,$size
,$type
, e$regex
, e se esforça para ser API compatível com filtragem coleção MongoDB.fonte
Isso deve funcionar, jsfiddle
fonte
Certifique-se de coagir o ID do objeto a um número inteiro se você testar a igualdade estrita:
Demo
fonte
Se você estiver usando sublinhado js, é fácil remover o objeto com base na chave. http://underscorejs.org . Exemplo:
fonte