一、数组塌陷
首先先用一个小案例对数组塌陷进行解释:
//需求:删除数组[0, 1, 2, 3, 4, 5]里的所有内容
//方法1:使用pop删除末尾的数字,并循环这个过程
var arr = [0, 1, 2, 3, 4, 5]
for(var i = 0; i < arr.length; i++){
arr.pop(function(){
return arr
})
}
console.log(arr) //此时打印的值为:[0,1,2]
//为什么没有完全删除:随着数据的删减,数组的长度也在不断变化,当i=3时,数组的长度也为3,循环不再继续。
这个现象就叫做“数组塌陷”。
//修改上述做法:
var arr = [0, 1, 2, 3, 4, 5]
for(var i = arr.length - 1; i < 0; i--){
arr.pop(function(){
return arr
})
}
console.log(arr)
//方法2:使用shift删除数组的第一个数字,并循环这个过程
var arr = [0, 1, 2, 3, 4, 5]
for(var i = arr.length - 1; i < 0; i--){
arr.shift(function(){
return arr
})
}
console.log(arr)
//方法3:使用splice删除片段
for(var i = 0; i < arr.length; i++){
arr.splice(function(){
return(i,1)
i--
})
}
console.log(arr)
二、数组去重
//需求:将数组var arr = [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]去重
//方法1:找到重复值,然后删除
var arr = [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]
for(var i = 0; i < arr.length; i++){
if(arr.indexOf(arr[i],arr[i + 1]) !== -1){ //如果返回值不为-1,说明在数组内找到了重复的值
arr.splice(i, 1) //将找到的重复的值删除
i-- //解决数组塌陷问题
}
}
console.log(arr)
//方法2:建立一个新数组,与原数组进行比较,将没有的值添加进去
var arr = [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]
var res = new Array()
for(var i = 0; i < arr.length; i++){
if(res.indexOf(arr[i]) === -1){ //如果满足此条件,说明数组之间没有重复的值
res.push(arr[i]))
}
}
console.log(res)
//方法3:用过滤filter做
var arr = [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]
var res = arr.filter(function(item,index){
return arr.indexOf[item] === index
}
console.log(res)
//分析:用indexOf查找到每一项数据所对应的索引,利用indexOf查找的是第一次出现的数据的索引的特点,如果查找到的索引与数据本身的索引相等,就说明此数据是第一次出现,与之前数据没有重复;如果查找到的数据与数据本身数据不相等,那么就说明在此数据之前有与之重复的数据;最后我们return出去的就是第一次出现的元素,不满足条件的元素就被过滤了。