Javascript - 按值删除数组项

时间:2011-08-22 03:27:27

标签: javascript arrays

我的情况:

var id_tag = [1,2,3,78,5,6,7,8,47,34,90];

我想 delete where id_tag = 90 并返回:

var id_tag = [1,2,3,78,5,6,7,8,47,34];

我该怎么做?

10 个答案:

答案 0 :(得分:217)

您需要使用JavaScript的Array splice method

var tag_story = [1,3,56,6,8,90],
    id_tag = 90,
    position = tag_story.indexOf(id_tag);

if ( ~position ) tag_story.splice(position, 1);

P.S。有关该酷~代码快捷方式的解释,请参阅此帖:

Using a ~ tilde with indexOf to check for the existence of an item in an array


注意: IE< 9不支持数组上的.indexOf()。如果你想确保你的代码在IE中工作,你应该使用jQuery的$.inArray()

var tag_story = [1,3,56,6,8,90],
    id_tag = 90,
    position = $.inArray(id_tag, tag_story);

if ( ~position ) tag_story.splice(position, 1);

如果你想支持IE< 9但是页面上还没有jQuery,没有必要使用只是$.inArray。您可以改为使用this polyfill

答案 1 :(得分:17)

如果您要经常使用它(并且在多个数组上),请扩展Array对象以创建未设置的函数。

Array.prototype.unset = function(value) {
    if(this.indexOf(value) != -1) { // Make sure the value exists
        this.splice(this.indexOf(value), 1);
    }   
}

tag_story.unset(56)

答案 2 :(得分:11)

tag_story.splice(tag_story.indexOf(id_tag), 1);

答案 3 :(得分:4)

function removeValue(arr, value) {
    for(var i = 0; i < arr.length; i++) {
        if(arr[i] === value) {
            arr.splice(i, 1);
            break;
        }
    }
    return arr;
}

这可以像这样调用:

removeValue(tag_story, 90);

答案 4 :(得分:4)

作为变种

delete array[array.indexOf(item)];

如果您对delete运算符一无所知,请勿使用此

答案 5 :(得分:3)

以下是我使用的一些辅助函数:

Array.contains = function (arr, key) {
    for (var i = arr.length; i--;) {
        if (arr[i] === key) return true;
    }
    return false;
};

Array.add = function (arr, key, value) {
    for (var i = arr.length; i--;) {
        if (arr[i] === key) return arr[key] = value;
    }
    this.push(key);
};

Array.remove = function (arr, key) {
    for (var i = arr.length; i--;) {
        if (arr[i] === key) return arr.splice(i, 1);
    }
};

答案 6 :(得分:3)

我喜欢使用过滤器:

var id_tag = [1,2,3,78,5,6,7,8,47,34,90];

// delete where id_tag = 90
id_tag = id_tag.filter(function(x) {
    if (x !== 90) {
      return x;
    }
});

答案 7 :(得分:2)

您需要使用.indexOf().splice()。类似的东西:

tag_story.splice(tag_story.indexOf(90),1);

答案 8 :(得分:1)

您可以使用lodash.js

_拉(arrayName中,valueToBeRemove);

在你的情况下: - _.pull(id_tag,90);

答案 9 :(得分:0)

var id_tag = [1,2,3,78,5,6,7,8,47,34,90]; 
var delete_where_id_tag = 90
    id_tag =id_tag.filter((x)=> x!=delete_where_id_tag);