我有一个数字数组,并使用.push()
方法向其添加元素。
有没有一种简单的方法可以从数组中删除特定的元素?
我正在寻找类似于下面这样的东西:
array.remove(number);
我必须使用核心JavaScript。框架是不允许的。
发布于 2013-12-20 03:54:26
2016年10月上编辑的
如果你的浏览器不支持标准的(Occam's razor)
,简单、直观、显式地使用它不可变的(原始数组保持不变)
在此代码示例中,我使用"array.filter(...)"函数从数组中删除不需要的项。此函数不会更改原始数组,而是创建一个新数组。如果您的浏览器不支持此功能(例如,Internet Explorer 9之前的版本,或Firefox 1.5之前的版本),请考虑使用。
删除项目(ECMA-262Edition 5代码又称旧样式JavaScript)
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 ]
正在删除项目(ECMAScript 6代码)
let value = 3
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => item !== value)
console.log(arr)
// [ 1, 2, 4, 5 ]
IMPORTANT ECMAScript:6 "() => {}“箭头函数语法在is、Chrome45之前的版本、Firefox22之前的版本和Safari10之前的版本中完全不支持。要在旧浏览器中使用ECMAScript 6语法,可以使用BabelJS。
删除多个项目(ECMAScript第7代码)
此方法的另一个优点是您可以删除多个项
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 ]
IMPORTANT "array.includes(...)“在is浏览器,Chrome 47之前的版本,火狐43之前的版本,Safari 9之前的版本和Edge 14之前的版本中都不支持这个功能,所以。
删除多个项目(可能是在将来)
如果"This-Binding Syntax"提案被接受,您将能够这样做:
// 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 ]
参考
发布于 2011-04-24 06:20:57
我不知道你对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];
发布于 2011-04-24 06:32:45
这取决于你是否想保留一个空位。
如果你想要一个空的插槽,do:
array[index] = undefined;
如果你不想要一个空的插槽,‘t:
//To keep the original:
//oldArray = [...array];
//This modifies the array.
array.splice(index, 1);
如果您需要该项的值,您可以只存储返回数组的元素:
var value = array.splice(index, 1)[0];
如果想要删除数组两端的内容,可以使用array.pop()
作为最后一个数组,或者使用array.shift()
作为第一个数组(这两个函数也都返回项的值)。
如果您不知道项的索引,可以使用array.indexOf(item)
来获取它(在if()
中获取一个项,或者在while()
中获取所有项)。如果未找到,array.indexOf(item)
将返回索引或-1
。
https://stackoverflow.com/questions/5767325
复制相似问题