2015-05-27 24 views
6

Ich habe eine Reihe von String und möchte einige von ihnen sofort entfernen. Aber es funktioniert nichtLodash aus String-Array entfernen

var list = ['a', 'b', 'c', 'd'] 
_.remove(list, 'b'); 
console.log(list); // 'b' still there 

Ich denke, es geschah, weil _.remove Funktion Zeichenfolge als zweites Argument akzeptieren und ist der Auffassung, dass Eigenschaftsnamen ist. Wie kann lodash in diesem Fall eine Gleichheitsprüfung durchführen?

Antwort

12

Eine weitere Option für Sie ist _.pull zu verwenden, die im Gegensatz zu _.without, nicht eine Kopie des Arrays nicht schaffen, aber es ändert nur statt:

_.pull(list, 'b'); // ['a', 'c', 'd'] 

Referenz: https://lodash.com/docs#pull

+0

Genau das, was ich brauche, danke –

1

Funktion _.remove akzeptiert keine Zeichenfolge als zweites Argument, sondern eine Prädikatfunktion, die für jeden Wert im Array aufgerufen wird. Wenn die Funktion true zurückgibt, wird der Wert aus dem Array entfernt.

Lodas doc: https://lodash.com/docs#remove

Entfernt alle Elemente von Array, das kehrt truthy für und gibt ein Array von den entfernten Elemente prädizieren. Das Prädikat ist an thisArg gebunden und wird mit drei Argumenten aufgerufen: (value, index, array).

Also, wenn Sie b von Ihrem Array entfernen möchten, sollten Sie etwas wie folgt aus:

var list = ['a', 'b', 'c', 'd'] 
_.remove(list, function(v) { return v === 'b'; }); 
["a", "c", "d"] 
+0

Der Rückgabewert sollte v == 'b' sein, nicht v! == 'b' – trevor

+0

@trevor-Nr. Das würde nur "b" entsprechen. Wir wollen das Gegenteil –

+2

Ich denke, sie wollten nur 'b' basierend auf dem Kommentar in ihrem Code entfernen: 'b immer noch da' – trevor

2

Als Giuseppe Pes weist darauf hin, erwartet _.remove eine Funktion. Ein direkterer Weg, um zu tun, was Sie wollen, ist _.without stattdessen, die nehmen Elemente direkt zu entfernen.

_.without(['a','b','c','d'], 'b'); //['a','c','d']