Underscore: _.ohne Array als zweites Argument zu akzeptieren

Erstellt am 21. Jan. 2011  ·  10Kommentare  ·  Quelle: jashkenas/underscore

Die aktuelle Definition von _.ohne akzeptiert Array als erstes Argument und dann beliebig viele folgende Argumente. Ich weiß, dass es schwierig werden könnte, aber es wäre hilfreich, wenn ich ein anderes Array als Argument übergeben könnte.

Die neue Funktionalität würde funktionieren wie
_.ohne([1,2,3], [1, 2])
kehrt zurück
[3]

Soweit ich weiß, funktioniert _.ohne nicht tief, daher ist es vielleicht nicht zu kompliziert -
_.ohne([1,2,3,[1]], [1], 1)
kehrt zurück
[2, 3, [1]]

enhancement wontfix

Hilfreichster Kommentar

Für diejenigen, die hierher kommen.... _.difference([0, 1, 3, 9], [1, 3]); // => [0, 9]

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

Alle 10 Kommentare

Glücklicherweise hat JavaScript eine eingebaute Möglichkeit, einer Funktion eine beliebige Anzahl von Argumenten zu übergeben.

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

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

Sichere Sache! Blöd mich, wie könnte ich das vergessen...

Es scheint, dass es so heißen muss

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

Was es nur ein wenig kompliziert macht (das Ausschlussarray mit dem ursprünglichen Array aufheben).

UPDATE: Ich habe ein neues Ticket für dieses Problem erstellt: https://github.com/documentcloud/underscore/issues/issue/118

Ich muss euch beiden zustimmen: Jeremy dafür, dass er die _.ohne Signatur konsistent gehalten hat und Ondrey dafür, dass er Jeremys vorgeschlagenen Workaround etwas hackisch fand (es scheint auch bei mir nicht zu funktionieren).

Daher möchte ich die Einführung von zwei neuen Unterstrichfunktionen vorschlagen: _.difference(*arrays) und _.symdifference(a,b) : Differenz würde alle Elemente aus dem ersten Array herausfinden, die in den anderen bereitgestellten Arrays nicht vorkommen. wobei _.symdifference() die Elemente zurückgeben würde, die sich entweder in a oder in b befinden, aber nicht in beiden.

Die "Inspiration" für diese Funktionen kommt vom Python-Set-Datentyp und sie sollten IMHO nicht nur auf Arrays beschränkt sein, da sie auch auf Objekte anwendbar sind.

Nur eine schnelle Möglichkeit, es mit Unterstrich zu schreiben: _.ohne.apply(_, [x].concat(y)), gibt ein Array von Werten in x ohne die Werte in y zurück.

Die Antwort von @rubenstolk funktioniert, außer dass er seinen Code nicht

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

Ich glaube, Github hat das vor 2 Jahren nicht getan @reggi!

Für diejenigen, die hierher kommen.... _.difference([0, 1, 3, 9], [1, 3]); // => [0, 9]

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

Ich weiß, dass dies geschlossen ist, aber der Spread-Operator von ES6 wird dabei helfen;)

Für jeden, der nicht nach dem von @agwidarsito erwähnten ES6-Spread-Operator suchen möchte,

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

Danke @addisonbgross!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen