数组的相关教程已经看完,总结一下清空数组的几个方法

  • length = 0
  • shift
  • pop
  • filter
  • slice
  • splice

length = 0

这个最快,直接把数组的长度设置为 0,数组里面就没有东西了

var arr = [1,2,3]
arr.length = 0
arr // []

shift

shift 用于删除数组第一项,这里清空数组就是用的 for 循环遍历数组长度次,每次都运行一次 shift 方法,最后就把数组清空啦。注意的是数组的长度,因为每次 shift 之后,数组的长度就会少 1,所以这里 for 开始的时候,需要定义一个 l 缓存住最开始数组的长度。看下面的代码。

var arr = [1,2,3]
for (var i = 0, l = arr.length; i < l; i++) {
arr.shift()
}
arr // []

pop

pop 清空数组原理同上面操作,只是 pop 是用来删除数组最后一项。

var arr = [1,2,3]
for (var i = 0, l = arr.length; i < l; i++) {
arr.pop()
}
arr.length // 0

splice

splice 可以删除元素也可以插入元素,这里用的删除元素。删除从 0 开始的长度为数组长度的元素个数,这个时候删除后返回的就是原来的数组的一个拷贝。是不是可以用于浅拷贝 🤔

var arr = [1,2,3]
arr.splice(0)
// 这里返回的是 [1,2,3]
// arr.splice(0, arr.length) 是一样的
arr // []

filter

过滤一个数组的元素,找出符合过滤 callback 的元素组成一个新的数组。所以我们这里就是找出一个都不会符合的条件,最后生成一个空的数组。这里其实也不能说是清空了数组,而只是把一个生成的空数组赋值给了原来的数组。

var arr = [1,2,3]
arr = arr.filter(e => e === undefined)
arr // []

slice

slice 是提取数组中的一部分,生成一个新的数组,不会修改原来的数组。同上面 filter,把一个空数组赋值给了原来的数组,有点犯规啊。

var arr = [1,2,3]
arr = arr.slice(arr.length)
arr // []

这么说来,直接赋值为空数组也是清空数组的意思了。😂

var arr = [1,2,3]
arr = []
arr // []