Underscore: _.sans accepter le tableau comme deuxième argument

Créé le 21 janv. 2011  ·  10Commentaires  ·  Source: jashkenas/underscore

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]]

enhancement wontfix

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

Tous les 10 commentaires

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]

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

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 !

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

ksullivan picture ksullivan  ·  9Commentaires

Francefire picture Francefire  ·  5Commentaires

marcalj picture marcalj  ·  5Commentaires

jdalton picture jdalton  ·  6Commentaires

githublyp picture githublyp  ·  3Commentaires