如何从数组中删除特定项目?
如何从数组中删除特定值?像这样:
array.remove(value); // removes all elements with value
我必须使用核心JavaScript。不允许使用框架。
如何从数组中删除特定值?像这样:
array.remove(value); // removes all elements with value
我必须使用核心JavaScript。不允许使用框架。
使用 indexOf
找到要删除的数组元素,然后使用拼接
删除该索引。index
splice() 方法通过删除现有元素和/或添加新元素来更改数组的内容。
const array = [2, 5, 9];
console.log(array);
const index = array.indexOf(5);
if (index > -1) { // only splice array when item is found
array.splice(index, 1); // 2nd parameter means remove one item only
}
// array = [2, 9]
console.log(array);
的第二个参数是要删除的元素数。请注意,就地修改数组并返回一个包含已删除元素的新数组。splice
splice
出于完整性的原因,以下是函数。第一个函数仅删除单个匹配项(即删除 from 的第一个匹配项),而第二个函数删除所有匹配项:5
[2,5,9,1,5,8,5]
function removeItemOnce(arr, value) {
var index = arr.indexOf(value);
if (index > -1) {
arr.splice(index, 1);
}
return arr;
}
function removeItemAll(arr, value) {
var i = 0;
while (i < arr.length) {
if (arr[i] === value) {
arr.splice(i, 1);
} else {
++i;
}
}
return arr;
}
// Usage
console.log(removeItemOnce([2,5,9,1,5,8,5], 5))
console.log(removeItemAll([2,5,9,1,5,8,5], 5))
在 TypeScript 中,这些函数可以使用类型参数保持类型安全:
function removeItem<T>(arr: Array<T>, value: T): Array<T> {
const index = arr.indexOf(value);
if (index > -1) {
arr.splice(index, 1);
}
return arr;
}
编辑于2016年10月
在此代码示例中,我使用 array.filter(...)
函数从数组中删除不需要的项。此函数不会更改原始数组,而是创建一个新数组。如果您的浏览器不支持此功能(例如,版本9之前的Internet Explorer或版本1.5之前的Firefox),请考虑使用core-js
进行polyfill。
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 ]
let value = 3
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => item !== value)
console.log(arr)
// [ 1, 2, 4, 5 ]
重要ECMAScript 6 箭头函数语法在 Internet Explorer 中完全不受支持,在版本 45 之前不支持 Chrome,在版本 22 之前不支持 Firefox,在版本 10 之前不支持 Safari。要在旧浏览器中使用 ECMAScript 6 语法,您可以使用 BabelJS。() => {}
此方法的另一个优点是可以删除多个项目
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 ]
Internet Explorer完全不支持重要的功能,版本47之前的Chrome,版本43之前的Firefox,版本9之前的Safari以及版本14之前的Edge,但您可以使用core-js
进行polyfill。array.includes(...)
如果“此绑定语法”建议被接受,您将能够执行以下操作:
// 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 ]
参考