Underscore: _.sem aceitar array como segundo argumento

Criado em 21 jan. 2011  ·  10Comentários  ·  Fonte: jashkenas/underscore

A definição atual de _.without aceita array como o primeiro argumento e, a seguir, qualquer número de args a seguir. Sei que pode ser complicado, mas seria útil se eu pudesse passar outro array como argumento.

A nova funcionalidade funcionaria como
_.sem ([1,2,3], [1,2])
retorna
[3]

Tanto quanto eu sei _.without não funciona profundamente, então pode não ser complicada -
_.sem ([1,2,3, [1]], [1], 1)
retorna
[2, 3, [1]]

enhancement wontfix

Comentários muito úteis

Para quem encontra aqui o seu caminho .... _.diferença ([0, 1, 3, 9], [1, 3]); // => [0, 9]

De: http://stackoverflow.com/questions/5722254/underscore-js-is-there-a-function-that-produces-an-array-thats-the-difference

Todos 10 comentários

Felizmente, o JavaScript tem uma maneira embutida de passar uma função qualquer número de argumentos.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply

_.without.apply(_, [1, 2, 3], [1, 2])

Coisa certa! Estúpido de mim, como eu poderia esquecer ...

Parece que precisa ser chamado assim

_.without.apply(_, [[1,2,3], 1, 2])

O que torna isso um pouco complicado (removendo a matriz de exclusão com a matriz original).

ATUALIZAÇÃO: criei um novo tíquete para esse problema: https://github.com/documentcloud/underscore/issues/issue/118

Eu tenho que concordar com vocês dois: a Jeremy por manter o _.sem assinatura consistente e a Ondrey por achar a solução alternativa proposta por Jeremys um pouco hackeada (parece não funcionar para mim também).

Assim, quero propor a introdução de duas novas funções de sublinhado: _.difference(*arrays) e _.symdifference(a,b) : a diferença encontraria todos os elementos do primeiro array que não aparecem nos outros arrays fornecidos, onde _.symdifference () retornaria os elementos que estão em a ou em b, mas não em ambos.

A "inspiração" para essas funções vem do tipo de dados conjunto python e IMHO, elas não devem ser limitadas apenas a matrizes, uma vez que também são aplicáveis ​​a objetos.

Apenas uma maneira rápida de escrever com sublinhado: _.without.apply (_, [x] .concat (y)), retornará uma matriz de valores em x sem os valores em y.

A resposta de @rubenstolk funciona, exceto que ele não comentou seu código, então os sublinhados foram interpretados como itálico. Para as gerações futuras! : railway_car:: rocket:: rainbow:: raised_hands:

_.without.apply(_, [originalArray].concat(removeArray));

Acho que o Github não fazia isso 2 anos atrás @reggi!

Para quem encontra aqui o seu caminho .... _.diferença ([0, 1, 3, 9], [1, 3]); // => [0, 9]

De: http://stackoverflow.com/questions/5722254/underscore-js-is-there-a-function-that-produces-an-array-thats-the-difference

Eu sei que está fechado, mas o operador de propagação do ES6 vai ajudar com isso;)

Para quem não deseja pesquisar o operador de spread ES6 que @agwidarsito mencionou, o que ele está dizendo é que você pode fazer isso no ES6:

const items = [1,2,3,4];
const itemsToRemove = [3,4,5];
const result = _.without(items, ...itemsToRemove);
// result is [1,2]

Obrigado @addisonbgross!

Esta página foi útil?
0 / 5 - 0 avaliações