如何按值从数组中删除项目?

新手上路,请多包涵

是否有从 JavaScript 数组中删除项目的方法?

给定一个数组:

var ary = ['three', 'seven', 'eleven'];

我想做类似的事情:

removeItem('seven', ary);

我已经查看了 splice() ,但它只删除了位置编号,而我需要一些东西来删除一个项目的值。

原文由 MacMac 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 622
2 个回答

如果不允许添加到本机原型,这可以是全局函数或自定义对象的方法。它从数组中删除与任何参数匹配的所有项目。

 Array.prototype.remove = function() {
 var what, a = arguments, L = a.length, ax;
 while (L && this.length) {
 what = a[--L];
 while ((ax = this.indexOf(what)) !== -1) {
 this.splice(ax, 1);
 }
 }
 return this;
 };

 var ary = ['three', 'seven', 'eleven'];

 ary.remove('seven');

 /* returned value: (Array)
 three,eleven
 */

为了使其成为全球——

 function removeA(arr) {
 var what, a = arguments, L = a.length, ax;
 while (L > 1 && arr.length) {
 what = a[--L];
 while ((ax= arr.indexOf(what)) !== -1) {
 arr.splice(ax, 1);
 }
 }
 return arr;
 }
 var ary = ['three', 'seven', 'eleven'];
 removeA(ary, 'seven');

 /* returned value: (Array)
 three,eleven
 */

并照顾 IE8 及以下-

 if(!Array.prototype.indexOf) {
 Array.prototype.indexOf = function(what, i) {
 i = i || 0;
 var L = this.length;
 while (i < L) {
 if(this[i] === what) return i;
 ++i;
 }
 return -1;
 };
 }

原文由 kennebec 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以像这样使用 indexOf 方法

 var index = array.indexOf(item);
if (index !== -1) {
  array.splice(index, 1);
}

注意您需要为 IE8 及以下版本填充它

 var array = [1,2,3,4]
var item = 3

var index = array.indexOf(item);
array.splice(index, 1);

console.log(array)

原文由 SLaks 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题