Javascript-按值删除数组项

我的情况:

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];

我该怎么做?

190803 次浏览
tag_story.splice(tag_story.indexOf(id_tag), 1);
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);

你可以使用 .indexOf().splice(),比如:

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

你可以使用 JavaScript 的 数组 splice方法:

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. 关于那个很酷的 ~波浪线快捷方式的解释,请看这篇文章:

使用带有 indexOf~波浪检查数组 中是否存在项。


注意: 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中使用它。您可以改用 这个填充物

如果您将经常使用它(并在多个数组上) ,那么扩展 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)

作为一种变体

delete array[array.indexOf(item)];

如果你对 delete操作员 别用这个一无所知。

下面是我使用的一些助手函数:

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);
}
};

我喜欢用滤镜:

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;
}
});

可以使用 lodash.js

_. pull (arrayName,valueToBeRemove) ;

就你而言:- Pull (id _ tag,90) ;

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);