从Javascript中指定值的数组中删除元素

从Javascript中指定值的数组中删除元素,javascript,arrays,Javascript,Arrays,我看过这个问题: 而且,似乎splice和delete都需要元素的索引才能删除,因此,当我有了该值时,如何轻松找到索引 例如,如果我有一个如下所示的数组: ["test1", "test2", "test3"] 我想删除test2。我现在使用的过程(我希望不是正确的方法)是使用$。每个检查数组中每个元素的值,在整个过程中维护一个计数器(用作索引引用),如果值等于“test2”,则我有我的索引(以计数器的形式)然后使用接头将其拆下 当数组变大时,我认为这将是一个缓慢的过程,但我有什么选择?如果

我看过这个问题:

而且,似乎splice和delete都需要元素的索引才能删除,因此,当我有了该值时,如何轻松找到索引

例如,如果我有一个如下所示的数组:

["test1", "test2", "test3"]
我想删除test2。我现在使用的过程(我希望不是正确的方法)是使用
$。每个
检查数组中每个元素的值,在整个过程中维护一个计数器(用作索引引用),如果值等于“test2”,则我有我的索引(以计数器的形式)然后使用接头将其拆下

当数组变大时,我认为这将是一个缓慢的过程,但我有什么选择?

如果要使用该函数删除该项,将在数组中找到它:

在数组中查找特定元素:(了解要删除的元素)

完整示例:

var array = ['test1', 'test2', 'test3'];
var value_to_remove = 'test2';
array.splice(array.indexOf(value_to_remove), 1); 

下划线.js是一个非常棒的小库,有很多很好的实用功能。在这种情况下,拒绝是合适的

(尽管内部方法当然类似于手动索引查找和切片/拼接)

indexOf
():

返回数组中可以找到给定元素的第一个索引,如果该元素不存在,则返回-1。

使用按值查找元素,然后使用结果索引。请注意,较旧的浏览器可能没有它,因此您需要检查它是否存在,如果没有,则添加它-从MDC执行检查,如果不存在,则添加函数

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
        "use strict";
        if (this === void 0 || 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 !== (1 / 0) && n !== -(1 / 0)) {
                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;
    }
}
if(!Array.prototype.indexOf){
Array.prototype.indexOf=函数(searchElement/*,fromIndex*/){
“严格使用”;
if(this==void 0 | | this==null){
抛出新的TypeError();
}
var t=对象(本);
var len=t.length>>>0;
如果(len==0){
返回-1;
}
var n=0;
如果(arguments.length>0){
n=数量(参数[1]);
if(n!==n){//验证是否为NaN的快捷方式
n=0;
}如果(n!==0&&n!==(1/0)&&n!==-(1/0)){
n=(n>0 | |-1)*数学地板(数学abs(n));
}
}
如果(n>=len){
返回-1;
}
var k=n>=0?n:Math.max(len-Math.abs(n),0);
对于(;k
请注意,如果像这样向
数组
原型中添加内容,
for..in
循环假定它们只看到数组索引(即,但常见的
for..in
循环)将开始出现问题,因为它们只希望看到数组索引时会看到字符串“indexOf”,有关详细信息,请参阅。

您可以使用jQuery并摆脱
$。每个
循环都可以跨浏览器工作(与Array.indexOf不同):


(我知道你的问题没有加上“jQuery”标签,但你确实提到你已经在使用一个
$。每个
循环)。

查看
索引,了解你想要什么。他知道——他甚至说他正在使用它。他想知道的是如何找到要在
splice
中使用的索引。
var array = ["test1", "test2", "test3"];
array.splice(array.indexOf("test2"), 1);
if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
        "use strict";
        if (this === void 0 || 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 !== (1 / 0) && n !== -(1 / 0)) {
                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;
    }
}
var index = $.inArray("test2", ["test1", "test2", "test3"]); // 1