La définition actuelle de _.without accept array comme premier argument, puis un nombre quelconque d'arguments suivants. Je sais que cela pourrait devenir difficile, mais ce serait utile si je pouvais passer un autre tableau en argument.
La nouvelle fonctionnalité fonctionnerait comme
_.sans([1,2,3], [1, 2])
Retour
[3]
Pour autant que je sache, _.without ne fonctionne pas en profondeur, donc ce n'est peut-être pas trop compliqué -
_.sans([1,2,3,[1]], [1], 1)
Retour
[2, 3, [1]]
Heureusement, JavaScript a un moyen intégré de transmettre à une fonction un nombre quelconque d'arguments.
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply
_.without.apply(_, [1, 2, 3], [1, 2])
Chose sûre! Stupide moi, comment pourrais-je oublier...
Il semble qu'il faut l'appeler comme ça
_.without.apply(_, [[1,2,3], 1, 2])
Ce qui complique un peu les choses (décalage du tableau d'exclusion avec le tableau d'origine).
MISE À JOUR : j'ai créé un nouveau ticket pour ce problème : https://github.com/documentcloud/underscore/issues/issue/118
Je suis d'accord avec vous deux : à Jeremy pour avoir maintenu la cohérence de la signature _.without et à Ondrey pour avoir trouvé la solution de contournement proposée par Jeremy un peu bidon (cela ne semble pas fonctionner pour moi aussi).
Ainsi, je souhaite proposer l'introduction de deux nouvelles fonctions de soulignement : _.difference(*arrays)
et _.symdifference(a,b)
: la différence découvrirait tous les éléments du premier tableau qui n'apparaissent pas dans les autres tableaux fournis, où _.symdifference() renverrait les éléments qui sont soit dans a soit dans b mais pas dans les deux.
L'"inspiration" de ces fonctions vient du type de données python set et à mon humble avis, elles ne devraient pas se limiter aux tableaux, car elles sont également applicables aux objets.
Juste un moyen rapide de l'écrire avec un trait de soulignement : _.without.apply(_, [x].concat(y)), renverra un tableau de valeurs dans x sans les valeurs dans y.
La réponse de @rubenstolk fonctionne sauf qu'il n'a pas commenté son code, donc les traits de soulignement sont interprétés comme des italiques. Pour les générations futures ! :railway_car: :rocket: :rainbow: :raised_hands:
_.without.apply(_, [originalArray].concat(removeArray));
Je pense que Github ne faisait pas ça il y a 2 ans @reggi !
Pour ceux qui trouvent leur chemin ici.... _.difference([0, 1, 3, 9], [1, 3]); // => [0, 9]
Je sais que c'est fermé, mais l'opérateur de propagation d'ES6 vous aidera avec cela ;)
Pour tous ceux qui ne veulent pas rechercher l'opérateur de propagation ES6 mentionné par
const items = [1,2,3,4];
const itemsToRemove = [3,4,5];
const result = _.without(items, ...itemsToRemove);
// result is [1,2]
Merci @addisonbgross !
Commentaire le plus utile
Pour ceux qui trouvent leur chemin ici.... _.difference([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