如何从JavaScript中的数组中删除特定的元素?
我有一个整数数组,我使用.push()
方法向它添加元素。
有没有简单的方法从数组中删除特定的元素? 相当于类似array.remove(int);
。
我必须使用核心JavaScript - 不允许任何框架。
找到要删除的数组元素的index
,然后使用splice
删除该索引。
var array = [2, 5, 9];
var index = array.indexOf(5);
if (index > -1) {
array.splice(index, 1);
}
// array = [2, 9]
splice
的第二个参数是要移除的元素的数量。 请注意, splice
会在适当位置修改数组并返回一个包含已被移除的元素的新数组。
注意 :浏览器对indexOf的支持是有限的; 它在Internet Explorer 7和8中不受支持。
如果您需要在不受支持的浏览器中使用indexOf
,请尝试以下polyfill
。 在这里找到关于这个polyfill
更多信息。
Array.prototype.indexOf || (Array.prototype.indexOf = function(d, e) {
var a;
if (null == this) throw new TypeError('"this" is null or not defined');
var c = Object(this),
b = c.length >>> 0;
if (0 === b) return -1;
a = +e || 0;
Infinity === Math.abs(a) && (a = 0);
if (a >= b) return -1;
for (a = Math.max(0 <= a ? a : b - Math.abs(a), 0); a < b;) {
if (a in c && c[a] === d) return a;
a++
}
return -1
});
我不知道你期待array.remove(int)
的行为。 有三种可能性,我可以想象你可能想要。
删除索引为i
的数组元素:
array.splice(i, 1);
如果你想删除与价值的每一个元素number
从数组:
for(var i = array.length - 1; i >= 0; i--) {
if(array[i] === number) {
array.splice(i, 1);
}
}
如果您只是想让索引i
的元素不再存在,但您不希望其他元素的索引发生更改:
delete array[i];
2016年10月编辑
在这个代码示例中,我使用“array.filter(...)”函数从数组中删除不需要的项目,该函数不会更改原始数组并创建一个新数组。 如果您的浏览器不支持此功能(例如,版本9之前的IE或版本1.5之前的Firefox),请考虑使用Mozilla中的过滤器填充 。
删除项目(ECMA-262版5代码又名oldstyle JS)
var value = 3
var arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(function(item) {
return item !== value
})
console.log(arr)
// [ 1, 2, 4, 5 ]
删除项目(ES2015代码)
let value = 3
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => item !== value)
console.log(arr)
// [ 1, 2, 4, 5 ]
重要 ES2015“()=> {}”在IE中完全不支持“箭头函数”语法,Chrome前45版本,Firefox前22版本,Safari前10版本。 要在旧版浏览器中使用ES2015语法,您可以使用BabelJS
删除多个项目(ES2016代码)
此方法的另一个优点是可以删除多个项目
let forDeletion = [2, 3, 5]
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => !forDeletion.includes(item))
// !!! Read below about array.includes(...) support !!!
console.log(arr)
// [ 1, 4 ]
重要的 “array.includes(...)”功能在IE中完全不支持,47版本之前的Chrome,43版本之前的Firefox,9版本之前的Safari和14版之前的Edge,所以这里是来自Mozilla的polyfill
删除多个项目(尖端实验JavaScript ES2018?)
// array-lib.js
export function remove(...forDeletion) {
return this.filter(item => !forDeletion.includes(item))
}
// main.js
import { remove } from './array-lib.js'
let arr = [1, 2, 3, 4, 5, 3]
// :: This-Binding Syntax Proposal
// using "remove" function as "virtual method"
// without extending Array.prototype
arr = arr::remove(2, 3, 5)
console.log(arr)
// [ 1, 4 ]
在BabelJS中自己试试:)
参考
上一篇: How do I remove a particular element from an array in JavaScript?