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