从JavaScript数组中删除字符串元素

11

有人能告诉我如何从数组中删除字符串元素吗?我已经谷歌了一下,但是只找到了通过索引号删除的方法。

我的例子:

 var myarray = ["xyz" , "abc" , "def"] ; 
 var removeMe = "abc" ; 

  myarray.remove(removeMe) ; 
  consle.log(myarray) ; 

这是我从控制台获取到的内容:

Uncaught TypeError: Object xyz,abc,def has no method 'remove' 

jsfiddle

4个回答

20

由于你正在使用jQuery

myarray.splice($.inArray("abc", myarray), 1);

编辑 如果该项不在数组中,则此“一行代码”可能会引发错误。以下是一个更好的示例:

var index = $.inArray("abc", myarray);
if (index>=0) myarray.splice(index, 1);

2
你不需要使用jQuery来完成这个。 - Selvakumar Arumugam
3
有些浏览器不支持indexOf。Jquery的inArray函数将从浏览器中抽象出这个功能。 - jwatts1980
使用 >=0 时加1 http://jsperf.com/not-vs-gt-vs-ge/4 (当然,前提是答案正确) - ajax333221
如果你已经在使用jQuery,那么这将变得非常容易,而且效果很好。 - bigmadwolf

9

引自https://dev59.com/wG865IYBdhLWcg3wKLT6#3955096

Array.prototype.remove= function(){
    var what, a= arguments, L= a.length, ax;
    while(L && this.length){
        what= a[--L];
        while((ax= this.indexOf(what))!= -1){
            this.splice(ax, 1);
        }
    }
    return this;
}
var ary = ['three', 'seven', 'eleven'];

ary.remove('seven')

或者,将其变为全局函数:
function removeA(arr){
var what, a= arguments, L= a.length, ax;
while(L> 1 && arr.length){
    what= a[--L];
    while((ax= arr.indexOf(what))!= -1){
        arr.splice(ax, 1);
    }
}
return arr;
}
var ary= ['three','seven','eleven'];
removeA(ary,'seven')

您需要自己编写一个函数。您可以循环遍历数组并从中删除元素,也可以让此函数为您完成此操作。无论哪种方式,这都不是标准的JS功能。


5

尝试像下面这样,

myarray.splice(myarray.indexOf(removeMe),1); 

您可以在不支持indexOf的浏览器中添加以下脚本(来自MDN)。
if (!Array.prototype.indexOf) {  
    Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {  
        "use strict";  
        if (this == null) {  
            throw new TypeError();  
        }  
        var t = Object(this);  
        var len = t.length >>> 0;  
        if (len === 0) {  
            return -1;  
        }  
        var n = 0;  
        if (arguments.length > 0) {  
            n = Number(arguments[1]);  
            if (n != n) { // shortcut for verifying if it's NaN  
                n = 0;  
            } else if (n != 0 && n != Infinity && n != -Infinity) {  
                n = (n > 0 || -1) * Math.floor(Math.abs(n));  
            }  
        }  
        if (n >= len) {  
            return -1;  
        }  
        var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);  
        for (; k < len; k++) {  
            if (k in t && t[k] === searchElement) {  
                return k;  
            }  
        }  
        return -1;  
    }  
}  

4
有些浏览器不支持indexOf - jwatts1980
1
另外,如果 indexOf 没有找到该元素,你将使用索引 -1 进行切割,这仍然会删除一个元素。 - Esailija

0

更简单的解决方案

var myarray = ["xyz" , "abc" , "def"]; 
var removeMe = "abc";

var theNewArray = myarray.filter(s => s !== removeMe);

console.log(theNewArray); // will return ["xyz" , "def"]

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