2015-05-27 15 views
6

Ho una matrice di stringhe e voglio rimuoverne immediatamente alcune. Ma non funzionaLodash remove from string array

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

Credo che sia successo perché _.remove funzione accetta stringa come secondo argomento e ritiene che è il nome della proprietà. Come fare a lodash fare un controllo di uguaglianza in questo caso?

risposta

12

Un'altra opzione per voi è quella di utilizzare _.pull, che a differenza di _.without, non crea una copia della matrice, ma modifica solo posto:

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

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

+0

Esattamente ciò di cui ho bisogno, grazie –

1

La funzione _.remove non accetta una stringa come secondo argomento ma una funzione di predicato che viene chiamata per ogni valore nell'array. Se la funzione restituisce true, il valore viene rimosso dall'array.

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

rimuove tutti gli elementi di matrice quel predicato restituisce truthy per e restituisce un array di elementi rimossi. Il predicato è legato a thisArg e invocato con tre argomenti: (valore, indice, matrice).

Quindi, se si desidera rimuovere dal b la matrice si dovrebbe qualcosa di simile:

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

Il valore restituito deve essere v == 'b', non v! == 'b' – trevor

+0

@trevor no. Quello corrisponderebbe solo a 'b'. Vogliamo il contrario –

+2

Penso che volessero semplicemente rimuovere "b" in base al commento nel loro codice: "b ancora lì" – trevor

2

Come sottolinea Giuseppe Pes, _.remove si aspetta una funzione. Un modo più diretto per fare quello che vuoi è usare _.without invece, che fa prendere gli elementi da rimuovere direttamente.

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