首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从数组中删除特定项?

如何从数组中删除特定项?
EN

Stack Overflow用户
提问于 2011-04-24 06:17:18
回答 124查看 9.2M关注 0票数 10.1K

我有一个数字数组,并使用.push()方法向其添加元素。

有没有一种简单的方法可以从数组中删除特定的元素?

我正在寻找类似于下面这样的东西:

array.remove(number);

我必须使用核心JavaScript。框架是不允许的。

EN

回答 124

Stack Overflow用户

发布于 2013-12-20 03:54:26

2016年10月上编辑的

如果你的浏览器不支持标准的(Occam's razor)

  • Do函数,

  • 可以用它,如果你的浏览器不支持标准的JavaScript函数,可以使用polyfill

,简单、直观、显式地使用它不可变的(原始数组保持不变)

  • 来做

在此代码示例中,我使用"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 ]

参考

票数 1.9K
EN

Stack Overflow用户

发布于 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];
票数 1.5K
EN

Stack Overflow用户

发布于 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

票数 569
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5767325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档