Digamos que eu tenho esse código
var arr = [{id: 1, nome: 'a'}, {id: 2, nome: 'b'}, {id: 3, nome: 'c'}];
e quero remover o item com id = 3 da matriz. Existe uma maneira de fazer isso sem emendar? Pode algo usando sublinhado ou algo assim?
Obrigado!
javascript
underscore.js
climboid
fonte
fonte
Respostas:
Apenas usando JavaScript simples, isso já foi respondido: remova objetos da matriz por propriedade do objeto .
Usando underscore.js, você pode combinar
.findWhere
com.without
:Embora, já que você esteja criando uma nova matriz nesse caso, você pode simplesmente usar
_.filter
ou aArray.prototype.filter
função nativa (como mostrado na outra pergunta). Então você iteraria sobre a matriz apenas uma vez, em vez de potencialmente duas vezes como aqui.Se você quiser modificar a matriz no local , precisará usar
.splice
. Isso também é mostrado na outra pergunta e o undescore não parece fornecer nenhuma função útil para isso.fonte
_.reject
parece uma seleção melhor aqui.arr.pop()
...Você pode usar Underscore
.filter
Também pode ser escrito como:
Verificar violino
Você também pode usar
.reject
fonte
_()
criará um wrapper em torno da coleção que permitirá que você invoque métodos de sublinhado.Use Sublinhado
_.reject()
:fonte
arr = _.reject(arr, d => d.id === 3 );
O sublinhado possui um método _without () perfeito para remover um item de uma matriz, especialmente se você tiver o objeto a ser removido.
Também trabalha com objetos mais complexos.
Se você não tiver o item para remover, apenas uma propriedade dele, você pode usar
_.findWhere
e, em seguida_.without
.fonte
{ Name: "Sam", Age: 19 }
para o sem, e não a variável sam, ela não funcionará mais. FiddleTenha cuidado se estiver filtrando seqüências de caracteres e procurando filtros que não diferenciam maiúsculas de minúsculas. _.without () faz distinção entre maiúsculas e minúsculas. Você também pode usar _.reject () como mostrado abaixo.
fonte
Outras respostas criam uma nova cópia da matriz, se você quiser modificar a matriz no local, poderá usar:
Mas isso pressupõe que o elemento sempre será encontrado dentro da matriz (porque, se não for encontrado, ainda removerá o último elemento). Para estar seguro, você pode usar:
fonte
ou outra maneira útil:
meus 2 centavos
fonte
object
e retorna umobject
. portanto, não é muito bom para trabalhar comArrays
onde podemos esperar umaarray
volta depois de remover um elemento._.without([1, 2, 1, 0, 3, 1, 4], 0, 1); => [2, 3, 4]
Use pode usar planície JavaScript 's
Array#filter
método como este:Ou use
Array#reduce
eArray#concat
métodos como este:NOTA:
fonte
Eu costumava tentar esse método
Também pode haver métodos melhores, como as soluções acima fornecidas pelos usuários
fonte
Usando underscore.js
O resultado será:
[{id:1name:'a'},{id:2,name:'c'}]
fonte
Você pode usar o método rejeitar de sublinhado; abaixo, retornará uma nova matriz que não terá matriz com correspondência específica
fonte