从Underscore中的数组中删除值

时间:2013-08-21 16:37:53

标签: javascript underscore.js

为什么下划线中没有超级简单的remove函数?

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

当然我可以使用rejectwithout ......但它们都不具有破坏性。我错过了什么吗?

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

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

1 个答案:

答案 0 :(得分:12)

解释

这是因为Underscore为JavaScript提供了功能概念,函数式编程的一个关键概念是Referential Transparency

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

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

解决方案

在Stack Overflow here中已经详细讨论了在Underscore中从数组中删除值的正确方法。作为旁注,在使用withoutrejectfilter时,如果您只想从数组中删除项目的单个实例,则需要唯一标识它。所以,就这样:

arr = _.without(arr, 5);

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