2015-05-27 22 views
6

Bir dizi dizim var ve bunlardan bazılarını anında kaldırmak istiyorum. Ama ben _.remove işlevi ikinci argüman olarak dize kabul çünkü oldu ve bu özellik adıdır gördüğü tahminLodash dize dizisinden kaldırma

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

çalışmaz. Bu durumda lodash eşitlik kontrolü nasıl yapılır?

cevap

12

tane sana seçenek daha _.without aksine, dizinin bir kopyasını yaratmaz _.pull kullanmaktır, fakat sadece bunun yerine o değiştirir:

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

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

+0

Tam ihtiyacım olan şey, teşekkürler –

1

İşlev _.remove, bir dizeyi ikinci argüman olarak kabul etmiyor, ancak dizideki her bir değer için çağrılan bir yükleme işlevini kabul etmiyor. İşlev true döndürürse, değer diziden kaldırılır.

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

için truthy döner ve döner kaldırılan elemanlı bir dizi yüklem dizisinden tüm öğeleri kaldırır. Bu yüklem, buArg'a bağlanır ve üç argümanla çağrılır: (değer, dizin, dizi). Eğer diziden b kaldırmak istiyorsanız

Yani, böyle bir şey olmalıdır:

Giuseppe Pes işaret ettiği gibi
var list = ['a', 'b', 'c', 'd'] 
_.remove(list, function(v) { return v === 'b'; }); 
["a", "c", "d"] 
+0

Dönüş değeri v == 'b' olmalıdır, v değil == 'b' – trevor

+0

@trevor no. Bu sadece 'b' ile eşleşir. –

+2

karşılığını istiyoruz çünkü bendeki 'b' kodunu kaldırmak istediklerini düşünüyorum: 'b hala orada' – trevor

2

, _.remove bir işlev bekliyor. İstediğinizi yapmanın daha doğrudan bir yolu, 'un öğesinin doğrudan kaldırılması gereken öğeleri alması yerine _.without kullanmaktır.

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