我有一个字符串数组,想要立即删除其中的一些。但它不起作用
var list = ['a', 'b', 'c', 'd']
_.remove(list, 'b');
console.log(list); // 'b' still there
我想这是因为_.remove
函数接受字符串作为第二个参数,并认为这是属性名称。在这种情况下如何使lodash进行相等检查?
答案 0 :(得分:21)
另一个选择是使用_.pull,与_.without不同,它不会创建数组的副本,而只是修改它:
_.pull(list, 'b'); // ['a', 'c', 'd']
答案 1 :(得分:4)
正如Giuseppe Pes指出的那样,_.remove
期待一个功能。更直接的方法是使用_.without
代替, 直接删除元素。
_.without(['a','b','c','d'], 'b'); //['a','c','d']
答案 2 :(得分:2)
函数_.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"]