从Underscore中的数组中删除值

sav*_*ger 4 javascript underscore.js

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

var arr = [1,2,3,4,5];
_.remove(arr, 5);
Run Code Online (Sandbox Code Playgroud)

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

我想我会以老式的方式做到这一点......

arr.splice(arr.indexOf(5), 1);
Run Code Online (Sandbox Code Playgroud)

Luk*_*uke 12

说明

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

从本质上讲,函数没有副作用,并且总是会为给定的输入返回相同的输出.换句话说,所有功能都是纯粹的.

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

从在下划线的阵列删除值的正确方法已经在长度上堆栈溢出讨论这里.作为旁注,在使用时without,reject或者filter,如果您只想从数组中删除项目的单个实例,则需要唯一标识它.所以,以这种方式:

arr = _.without(arr, 5);
Run Code Online (Sandbox Code Playgroud)

您将删除所有的实例5arr.