实际情况中,有一种情况是定义了数组,但是还未给数组赋值的情况,这种情况就会形成数组位上的空值
let array = new Array(4);
array
// (4) [空属性 × 4]
这里的array就是初始化的长度为4的数组,但是我们还未给数组的属性赋值,所以它时包含4个空值的数组
下面对空位进行处理
先来了解一下,在数组的遍历过中,
filter,map,forEach,some,every,reduce方法都会跳过空值的处理
let array = new Array(4)
array [1] = 1
array [3] = 3
array // (4) [空白, 1, 空白, 3]
array.filter(item => {
debugger
item //只有1和3,空值会跳过
})
array.map(item => {
debugger
item //只有1和3,空值会跳过
})
array.forEach(item => {
debugger
item //只有1和3,空值会跳过
})
array.reduce((list, cur, index) => {
debugger
cur //只有1和3,空值会跳过
}, [])
array.every(item => {
debugger
return item //只有1和3,空值会跳过
})
array.some(item => {
debugger
return item < 0 //只有1和3,空值会跳过
})
在上面的代码运行中,可以看到上述几个数组处理方法会跳过对空值的处理,需要注意的是,我们在使用map的时候,因为map最终会生成一个与原数组长度相同的新数组,由于map并未对空值进行处理,所以,在新生成的数组中空位会被保留.
如果处理数组的空位呢,比如赋值或者删除
先看过滤
array.filter(item => true) // [1,3]
由于上述的遍历方法都会跳过空值处理,所以,如果我们要想处理空值,只能使用for循环
for(let i=0; i<array.length; i++){
array[i] = array[i] ? array[i] : 0
}
array
//(4) [0, 1, 0, 3]