首页 > 编程笔记
JS删除数组元素(3种方法)
JS 删除数组中的元素有3种方式,分别是:
例如删除数组中第2个元素,代码如下:
另外判断对应索引的元素是否存在于数组中,可以使用 in 运算符。在 in 运算符前边写上索引,后边写上进行判断的数组,如果存在则会返回 true,如果不存在则返回 false。
例如,判断上例中索引为1的元素是否还存在于 arr 数组中,代码如下:
需要要注意的是,虽然 arr[1] 返回了 undefined,但是因为使用 delete 运算符删除了它而导致它不存在,如果直接把该位置的元素设置为 undefined,则它还会存在于数组中,只不过值为 undefined,代码如下:
例如使用 splice() 实现删除数组中的第2个元素,代码如下:
在调用 splice() 方法之后,原数组则变成了除掉被删除的元素外所剩下的元素。这种改变原数组的操作,称为原地(In-Place)操作,不过数组对象提供的大部分操作都是返回新的数组,并不会改变原数组。
splice() 的第1个参数也可以是负数,这样就会从最后一个元素索引开始向前计算起始索引,其他操作与传递正数时一样。
如果传递给 splice() 的第2个参数大于数组的长度,或者没有传递,则会从起始索引开始,删除它后面所有的元素,例如删除一个数组中索引为3的元素及后面所有的元素的代码如下:
如果要添加新元素,则只需把第2个参数,即要删除的数量,设置为 0,然后后边的参数传递要添加的元素。
例如,从索引为2的位置插入3个新的元素,代码如下:
如果要替换一些元素,则只需让删除的数量等于新添加的元素的数量,代码如下:
最后,如果给 splice() 的参数设置了大于或等于数组长度的数值,则 splice() 会直接从数组末尾开始添加元素,无论第2个参数(要删除的数量)设置为多少,都不会删除元素,代码如下:
数组在创建之后,它自己会维护 length 属性的值,当有元素添加进来时,会自动增加 length 的值,而当有元素被删除时,则会自动减少,而反过来也可以通过修改 length 属性的值来删除超过 length 数量的元素,这种只适合删除末尾的元素,代码如下:
- 使用 delete 运算符;
- 使用 splice() 方法;
- 直接修改 length 属性。
1. JS delete 运算符
使用 delete 运算符删除数组中的元素,可以在数组访问的语法基础上,在前边加上 delete 关键字。例如删除数组中第2个元素,代码如下:
let arr=[1,2,3]; delete arr[1]; //返回值为true,arr变为[1,empty,3] arr.length; //3可以看到使用 delete 运算符删除元素之后,对应索引的元素空位会保留下来,后边的元素并不会向前移动,数组的长度也不会发生变化。
另外判断对应索引的元素是否存在于数组中,可以使用 in 运算符。在 in 运算符前边写上索引,后边写上进行判断的数组,如果存在则会返回 true,如果不存在则返回 false。
例如,判断上例中索引为1的元素是否还存在于 arr 数组中,代码如下:
1 in arr; //false arr[i]; //undefined可以看到索引为1的元素不存在了,访问它的值会返回 undefined。
需要要注意的是,虽然 arr[1] 返回了 undefined,但是因为使用 delete 运算符删除了它而导致它不存在,如果直接把该位置的元素设置为 undefined,则它还会存在于数组中,只不过值为 undefined,代码如下:
let arr=[1,2,3]; arr[1]=undefined; 1 in arr; //true arr[1]; //undefined可以看到 arr[1] 的值仍为 undefined,但是使用 in 判断时,1 这个索引位置的元素还是存在于数组中的。
2. JS splice() 方法
如果要删除元素并使后续元素向前移动,则可以使用 splice(),可以给它的第1个参数传递要删除的元素的起始索引,第2参数传递要删除的数量。例如使用 splice() 实现删除数组中的第2个元素,代码如下:
let arr=[1,2,3]; arr.splice(1,1); //[2] arr; //[1,3]arr 变成了 [1,3],splice() 会返回被删除的元素,因为它支持删除多个元素,所以返回的结果是包含被删除元素的数组,如果只删除了一个元素,则也会把它放到结果数组中,例如上例中 splice() 的返回值为 [2]。
在调用 splice() 方法之后,原数组则变成了除掉被删除的元素外所剩下的元素。这种改变原数组的操作,称为原地(In-Place)操作,不过数组对象提供的大部分操作都是返回新的数组,并不会改变原数组。
splice() 的第1个参数也可以是负数,这样就会从最后一个元素索引开始向前计算起始索引,其他操作与传递正数时一样。
如果传递给 splice() 的第2个参数大于数组的长度,或者没有传递,则会从起始索引开始,删除它后面所有的元素,例如删除一个数组中索引为3的元素及后面所有的元素的代码如下:
let arr=[1,2,3,4,5]; arr.splice(3); //[4,5] arr; //[1,2,3]splice() 还可接收第3个参数,它是一个变长的参数,用于指定要添加的元素,即在删除元素之后,从第1个参数指定的位置再添加新的元素,后面的元素会顺序后移,因此 splice() 还支持添加和替换元素。
如果要添加新元素,则只需把第2个参数,即要删除的数量,设置为 0,然后后边的参数传递要添加的元素。
例如,从索引为2的位置插入3个新的元素,代码如下:
let arr=[1,3,5,7]; arr.splice(2,0,2,4); //[] arr; //[1,3,2,4,5,7]这时,因为要删除的元素的数量为 0,所以 splice() 会返回一个空的数组,原数组则原地新增了3个元素,上方代码把2和4放到了索引为 2、3 的位置,然后5和7分别向后移动了1位。
如果要替换一些元素,则只需让删除的数量等于新添加的元素的数量,代码如下:
let arr=[1,3,5,7]; arr.splice(2,2,2,4); //[5,7] arr; //[1,3,2,4]这里从索引为2的位置删除了2个元素,即5和7,之后在索引为2的位置添加了2个新的元素2和4,最后结果就是 [1,3,2,4]。
最后,如果给 splice() 的参数设置了大于或等于数组长度的数值,则 splice() 会直接从数组末尾开始添加元素,无论第2个参数(要删除的数量)设置为多少,都不会删除元素,代码如下:
let arr=["a","b","c"]; arr.splice(3,10,"d","e","f"); //[] arr; //["a","b","c","d","e","f"]
3. 修改 length 属性
JS 删除数组元素还有一种不常用的方式,使用 length 属性。数组在创建之后,它自己会维护 length 属性的值,当有元素添加进来时,会自动增加 length 的值,而当有元素被删除时,则会自动减少,而反过来也可以通过修改 length 属性的值来删除超过 length 数量的元素,这种只适合删除末尾的元素,代码如下:
let arr=[1,2,3,4]; arr.length; //4 arr.length=2; arr; //[1,2] arr.length=0; arr; //[]把 arr.length 设置为2之后,超过2个的元素直接被舍弃了。当把数组的 length 设置为0时,数组就变成了空数组。