按值删除数组元素的最佳方法

我有一个这样的数组

arr = ["orange","red","black","white"]

我想增加定义一个deleteElem()方法的数组对象,它的行为如下所示:

arr2 = arr.deleteElem("red"); // ["orange","black","white"] (with no hole)

使用value参数(无索引)完成此任务的最佳方法是什么?


这是如何完成的:

var arr = ["orange","red","black","white"];
var index = arr.indexOf("red");
if (index >= 0) {
  arr.splice( index, 1 );
}

此代码将删除阵列中的1次“红色”。


我知道这个问题已经有了一个可以接受的答案,但是当我刚刚接触编码时,我总是发现splice不是直截了当的。 即使在今天,它的可读性也较差

但可读性很重要。

所以在这种情况下,我宁愿使用如下的过滤方法:

arr = ["orange","red","black","white","red"]

arr = arr.filter(val => val !== "red");

console.log(arr) // ["orange","black","white"]

就是这样。

请注意,此方法会删除阵列中出现的所有“红色”。

现在我发现真正有趣的是,你实际上可以很容易地阅读发生了什么。 就我而言,更有趣的是,如果您使用数组对象,则可以轻松地进一步,例如:

arr = arr.filter(obj => obj.prop !== "red");

根据ryannjohnson的评论,这种方法似乎没有任何警告。


这里有一个下划线方法,http://underscorejs.org/#without

arr = ["orange","red","black","white"];

arr = _.without(arr, "red");
链接地址: http://www.djcxy.com/p/19039.html

上一篇: The best way to remove array element by value

下一篇: Move an array element from one array position to another