2015-05-27 284 views
6

我有一个字符串数组,想立即删除其中的一部分。但是,这是行不通的Lodash从字符串数组中删除

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

我猜它的发生是因为_.remove函数接受字符串作为第二个参数,并认为是属性名。如何使lodash在这种情况下做平等检查?

回答

12

为您多一个选择是使用_.pull,它不像_.without,不创建数组的副本,但只能修改它来代替:

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

参考:https://lodash.com/docs#pull

+0

正是我需要的,谢谢 –

1

函数_.remove不接受字符串作为第二个参数,而是为数组中的每个值调用一个谓词函数。如果函数返回true,则该值将从数组中移除。

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

移除从阵列谓词返回truthy并 返回所移除的元件的阵列的所有元素。该谓词绑定到 thisArg并用三个参数调用:(value,index,array)。

所以,如果你想从你的数组中删除b你应该是这样的:

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

返回值应该是v =='b',而不是v!=='b' – trevor

+0

@trevor no。那只会匹配'b'。我们想要相反 –

+2

我认为他们只是想根据代码中的评论删除'b':'b still there' – trevor

2

由于朱塞佩瘟指出,_.remove期待的功能。更直接的做法是使用_.without而不是将元素直接删除。

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