4

remove为什么下划线没有超级简单的功能?

var arr = [1,2,3,4,5];
_.remove(arr, 5);

当然我可以使用rejector without... 但它们都不是破坏性的。我错过了什么吗?

我想我会用老式的方式来做...

arr.splice(arr.indexOf(5), 1);

4

1 回答 1

13

解释

这是因为 Underscore 为 JavaScript 提供了函数式概念,而函数式编程的关键概念之一是引用透明性。

本质上,函数没有副作用,并且对于给定的输入总是返回相同的输出。换句话说,所有函数都是pure

对于给定的输入,从数组中删除一个元素确实是一个可预测的结果,但结果将是副作用而不是返回值。因此,破坏性功能不适合功能范式。

解决方案

在下划线中从数组中删除值的正确方法已经在 Stack Overflow 上详细讨论。附带说明一下,使用without,reject或时filter,如果您只想从数组中删除一个项目的单个实例,则需要唯一标识它。所以,以这种方式:

arr = _.without(arr, 5);

您将删除from的所有实例。5arr

于 2013-08-21T16:40:14.713 回答