从Underscore数组中删除值

4
为什么underscore中没有一个超级简单的remove函数呢?
var arr = [1,2,3,4,5];
_.remove(arr, 5);

我可以使用rejectwithout... 但它们都不是破坏性的。难道我漏掉了什么吗?

我想我会按照老传统的方式来做...

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


所以你需要修改原始文件,对吗? - user2437417
可能是 从JavaScript中的对象数组中删除项目 的重复问题。 - Bergi
1个回答

13

解释

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

本质上,函数不会产生副作用,并且对于给定输入始终返回相同的输出。换句话说,所有函数都是纯函数

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

解决方案

在Underscore中正确删除数组中的值已经在Stack Overflow上进行了详细讨论,链接在这里。顺便提一下,当使用withoutrejectfilter时,如果您只想从数组中删除单个实例,则需要唯一标识它。所以,通过这种方式:

arr = _.without(arr, 5);

您需要从arr中删除5所有实例。


@AaronF 很好的发现。我已经更新了我的答案来强调这个功能。 - Luke Willis

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