·

JS删除数组的几种方式

发布时间:2024-08-28 17:55:02阅读量:85
专业文章
转载请注明来源

JavaScript中数组元素删除的八种方法汇总这篇文章中,我们总结了八种数组删除的JS方法,下面我们将他们应用于具体场景中,更好的说明JS中如何删除数组元素。

一、删除第一个元素

1、shift() 方法

调用shift()方法可以把数组的第一个元素删除,并返回第一个元素的值。

注意: 此方法改变数组的长度!

提示: 移除数组末尾的元素可以使用 pop() 方法。

var arr = [1, 2, 3, 4]
arr.shift()  // 1
// arr => [2, 3, 4]

2、slice() 方法

slice() 方法可从已有的数组中返回选定的元素。

slice() 方法不仅可以用于数组,还能用于字符串。slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。

注意: slice() 方法不会改变原始数组。

var arr = [1,2,3,4]
var newArr = arr.slice(1)
// arr => [1,2,3,4]
// newArr => [2,3,4]

3、splice() 方法

splice() 方法用于添加或删除数组中的元素。

注意:这种方法会改变原始数组。

如果删除一个元素,则返回一个元素的数组。 如果未删除任何元素,则返回空数组

var arr = [1, 2, 3, 4];
arr.splice(0,1);      //[1]
console.log(arr);    //[2, 3, 4]

二、删除最后一个元素

1、pop() 方法

调用pop()方法会删除数组最后一个元素,并返回删除的元素。

注意:此方法改变原数组!

提示: 移除数组第一个元素,请使用 shift() 方法。

var arr = [1, 2, 3, 4];
arr.pop()    //4
console.log(arr)    //[1, 2, 3]

2、slice() 方法

var arr = [1,2,3,4]
var newArr = arr.slice(0, arr.length - 1)
// arr => [1,2,3,4]
// newArr => [1,2,3]

3、 splice() 方法

var arr = [1,2,3,4]
var newArr = arr.splice(arr.length - 1, 1)
// arr => [1, 2, 3]
// newArr => [4]

三、删除数组中某个指定下标的元素

1、splice 删除

let index = 3

let arr = [1,2,3,4,5]

 arr.splice(index, 1) // [4]

// arr => [1,2,3,5]

2、for循环push删除

通过循环遍历数组,将符合条件的元素push到新的数组中

let index = 3, // 删除的id

let arr = [1,2,3,4,5],

let arrLen = arr.length,

let newArr = [];

for (let i = 0; i < arrLen; i++) {

    if (i !== index) {

        newArr.push(arr[i])

    }

}  

// arr => [1,2,3,4,5]

// newArr => [1,2,3,5]

3、for循环splice删除

通过循环遍历数组,使用splice()方法将符合条件的元素删除

let index = 3 // 删除的id

var arr = [1,2,3,4,5]

arr.forEach(function(item, i) {
    if(i == index) {
        arr.splice(i, 1);
    }
});

// arr => [1, 2, 3, 5]

4、delete删除

JavaScript提供了一个delete关键字用来删除(清除)数组元素。

要注意的是,使用delete删除元素之后数组长度不变,只是被删除元素被置为undefined了。遍历直接跳过undefined

let index = 3

let arr = [1,2,3,4,5]

delete arr[index]

// arr  = > [1, 2, 3, undefined, 5]

四、删除数组中某个指定元素

1、splice 删除

let value = 'b',

let arr = ['a','b','c','d']



arr.splice(arr.indexOf(value), 1) // ['b']

// arr => ['a','c','d']

2、filter 删除

let arr = ['a','b','c','d'],
let value = 'b'
arr = arr.filter(item => item != value)
// arr => ['a','c','d']

3、for 删除

let value = 'b',

let arr = ['a','b','c','d'],

let arrLen = arr.length,

let newArr = []

for (let i = 0; i < arrLen; i++) {

    if (arr[i] !== value) {

        newArr.push(arr[i])

    }

}  

// 其他forEach、map、for of循环同理

4、Set 删除

let arr = ['a','b','c','d'],

let  value = 'b'

let newSet = new Set(arr)

newSet.delete(value)

let newArr = [...newSet]

// newArr => ['a','c','d']


评论区

暂无评论,来发布第一条评论吧!

弦圈热门内容

宛如来自空无的召唤——数学大师格罗腾迪克的生平(上)

作者简介:艾林‧杰克逊(Allyn Jackson)曾任美国数学学会会讯(Notices of the AMS)的副主编与总主笔,加州大学柏克莱分校数学硕士。她觉得能结合数学和写作两个非常不同的领域,面对各种数学课题和数学人物,收获很大。译者简介:翁秉仁为台湾大学数学系副教授。本文原文发表在 2004 年的 Notices of the AMS 51卷第 9 期,以下译文刊登在《数理人文》创刊号(2013 年 12 月)。媒体或机构如需转载,请联系《数理人文》杂志(微信号:math_hmat)。重点摘要格罗腾迪克是二十世纪的数学大师,为代数几何开启全新的面貌,数学影响仍方兴未艾。格罗腾迪克早年多舛,与父母颠沛流离。他的数学背景贫乏,一切出于自学,但天资奇高,在苦学深思与师友攻错下,终于成为一代宗师。格罗腾迪克以韦伊猜想为目标,从范畴论观点所铸造的新工具,连结了离散的数论世界与连续的拓扑世界,启迪了多位菲尔兹奖得主的工作。如果不把科学看成权力和宰制的工具,而是我们物种在时间长河进行的知识探险。每门科学好比和声一样,依时更迭,或广袤,或丰盈。就像顺着世世代代于焉展露的乐曲,所有主题的精致对 ...

如何构建一个比复数域$\mathbb{C}$还要大的域?

本文我们探讨这个问题:是否存在一种扩张复数域$\mathbb{C}$的方法,使得$\mathbb{C} \subset\mathbb{C}[a]$?或者$\mathbb{C}$是所有域扩张的终点?下面围绕这个问题,我们将提供两种扩张复数域$\mathbb{C}$的方法。方法1:$\mathbb{C}$的笛卡儿积$$P = {\Bbb C}\times{\Bbb C}\times\cdots$$并不是一个域,因为它有零因子:$$(0,1,0,1,\cdots)(1,0,1,0\cdots)=(0,0,0,0,\cdots)。$$但是将零因子商掉,就能得到一个域。令$\mathcal U$为$\Bbb N$上的一个nonprincipal ultrafilter。我们定义$$(a_1,a_2,\cdots)\sim(b_1,b_2,\cdots)$$当$$\{n\in\Bbb N\,\vert\, a_n=b_n\}\in\mathcal U。$$然后商$F = P/\sim$就是一个严格比$\mathbb{C}$大的域,我们称这个域为超积(英语:ultraproduct)。并且嵌入映射$ ...

如果两个对象的余极限同构,那么这两个对象同构?

令$A,B$为特征$p$的交换环。令$\phi_{A}:A\rightarrow A,\phi_{B}:B\rightarrow B$为Frobenius态射,即$p$次方映射。如果我们有 ${\rm{colim}}_{n\in\mathbb{N}}A\cong {\rm{colim}}_{n\in\mathbb{N}}B$,其中transition映射为Frobenius态射,那么我们可以得出$A\cong B$吗?答案:不能。回顾一下,一个$\mathbb{F}_p$-代数$R$是完美的,如果它的Frobenius映射$\varphi : R \ni r \mapsto r^p \in R$是一个同构。Frobenius态射的次方的余极限${\rm{colim}}_{n\in\mathbb{N}}R$是$\mathbb{F}_p$-代数$R$的完美化,并且它这样命名是因为它是完美$\mathbb{F}_p$-代数到$\mathbb{F}_p$-代数的包含映射的左伴随。这使得完美$\mathbb{F}_p$-代数构成了一个$\mathbb{F}_p$-代数的反射子范畴,这意味着在完美 ...

基变换映射$U\times_{X}X\rightarrow U\times_{Y}Y$

我的提问:令$X,Y$是概形。令$X\rightarrow Y,X\rightarrow X, Y\rightarrow Y$为概形态射。为什么态射$U\times_{X}X\rightarrow U\times_{Y}Y$是$X\rightarrow X\times_{Y}Y$通过$U\times_{Y}Y\rightarrow Y$的基变换。这是我尝试的图,其中三角形是交换的。但是我发现$(U\times_{Y}Y)\times_{Y}(X\times_{Y}Y)=U\times_{Y}X\times_{Y}Y=U\times_{Y}X$,即我无法得到想要的$U\times_{X}X$。我这是犯了什么错误?这是问题的上下文,来自朱歆文的论文Affine Grassmannians and the geometric Satake in mixed characteristic (arXiv link):引理 A.2. 对任何代数空间的平展态射$X\to Y$,由$\sigma_X$导出的相对Frobenius态射$X\to X\times_{Y,\sigma_Y}Y$是一个同构。证 ...