数组塌陷问题以及数组去重

一、数组塌陷

首先先用一个小案例对数组塌陷进行解释:

//需求:删除数组[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出去的就是第一次出现的元素,不满足条件的元素就被过滤了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值