Lodash 从字符串数组中移除元素

17

我有一个字符串数组,想要立即删除其中的一些字符串。但是这并没有起作用。

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

我猜发生这种情况是因为_.remove函数接受字符串作为第二个参数,并将其视为属性名。在这种情况下,如何让lodash执行相等性检查?

我猜发生这种情况是因为_.remove函数接受字符串作为第二个参数,并将其视为属性名。在这种情况下,如何让lodash执行相等性检查?

3个回答

29

还有一个选项是使用_.pull,与_.without不同的是,它不会创建数组的副本,而是直接修改数组:

一个更好的选择是使用 _.pull。与 _.without 不同,它不会创建数组的拷贝,而只是修改它:

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

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


6
正如Giuseppe Pes所指出的那样,_.remove需要一个函数。更直接的方法是使用_.without,它可以直接删除元素。
_.without(['a','b','c','d'], 'b');  //['a','c','d']

3

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

Lodash 文档:https://lodash.com/docs#remove

删除谓词返回真值的数组中的所有元素,并返回已删除元素的数组。谓词绑定到 thisArg,并使用三个参数调用:(value,index,array)。

因此,如果要从数组中删除 b,您应该这样做:

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

2
我认为他们只想根据代码中的注释删除'b': 'b仍然存在'。 - trevor
是的,我想从我的列表中删除'b'。所以这里应该有等式。 - just-boris
1
此外,我发现 _.without 正好符合我的需求,但它会创建一个数组的副本。 - just-boris
以下是删除值为 b 的代码,因为当值为 b 时,表达式返回 false 并将其删除。 - Giuseppe Pes
你目前代码中的条件(return v !== 'b')实际上会除了'b'以外的所有内容。在浏览器中运行一下你的代码测试吧。 - trevor
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接