为什么下划线中没有超级简单的remove
函数?
var arr = [1,2,3,4,5];
_.remove(arr, 5);
当然我可以使用reject
或without
......但它们都不具有破坏性。我错过了什么吗?
我想我会用老式的方式来做...
arr.splice(arr.indexOf(5), 1);
唉
答案 0 :(得分:12)
这是因为Underscore为JavaScript提供了功能概念,函数式编程的一个关键概念是Referential Transparency。
基本上,函数没有副作用,并且总是会为给定的输入返回相同的输出。换句话说,所有函数都是pure。
从数组中删除元素确实是给定输入的可预测结果,但结果将是副作用而不是返回值。因此,破坏性功能不适合功能范例。
在Stack Overflow here中已经详细讨论了在Underscore中从数组中删除值的正确方法。作为旁注,在使用without
,reject
或filter
时,如果您只想从数组中删除项目的单个实例,则需要唯一标识它。所以,就这样:
arr = _.without(arr, 5);
您将从5
删除 arr
的所有实例。