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

我怎样才能做到这一点?

你会想要使用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); 

PS对于这个很酷的波浪号快捷键的解释,请看这个post:

使用带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使用它。 你可以使用这个polyfill来代替。

如果你打算经常使用这个(在多个数组上),扩展Array对象来创build一个未设置的函数。

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

作为一个变种

 delete array[array.indexOf(item)]; 

如果你对delete操作符一无所知, 不要使用这个

以下是我使用的一些帮助function:

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

我喜欢使用filter:

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