练习三、setTimeout使用闭包,判断数组某个值并进行多种方法去除

  1. 功能描述:setTimeout使用闭包,判断数组某个值并进行多种方法去除

  1. 主要考点:

2.1 setTimeout如何解决异步操作里变量混乱→(1.独立块作用域,2.使用setTimeout第三参数,3.闭包自执行匿名函数)

2.2 去除数组某个数值的方法 →(1. push(),2. spliace(), 3. ES6新增的filter过滤, 4. forEach())

  1. 框架:elementui

  1. 相关代码

<script>
export default {
  data(){
    return{

    }
  },
  mounted(){
    this.count()
    this.arrayOut()
  },
  methods:{
    count(){
      // 题目:以下输出需要为0,1,2,3,4,5
      // 分析:因为是异步操作,所以需要等待执行完每个回调函数才能进行打印操作而现在i都是固定一个值
      for(var i = 0; i < 5; i++){
        setTimeout(function(){
          console.log(i);
        },1000)
      }

      //解法一 let 是块作用域,所以会分配独立5个块,里面的变量i相互独立且不影响
      for(let i = 0; i < 5; i++){
        setTimeout(function(){
          console.log('解法一',i);
        },1000)
      }

      //解法二 setTimeout的第三个参数(先执行)回传到第一个参数,j =>{ console.log('解法二',j); }中进行执行
      for(var i = 0; i < 5; i++){
        setTimeout(j =>{
          console.log('解法二',j);
        },1000,i)
      }

      //解法三 闭包方法 (i)是立即函数,而且把全局变量i转换成局部变量i,是个封闭的作用域,内部可以访问外部变量,但反之不能,返回的变量传到j变量中
      for(var i = 0; i < 5; i++){
        (j =>{
          setTimeout(() => {
            console.log('解法三',j);
          },1000)
        })(i)

      }
    },

    // 题目:已知 var arr = [4,0,7,9,0,0,2,6,0,3,1,0];
    //      要求将数组中的 0 项去掉,将不为 0 的值存入一个新的数组,生成新的数组。
    arrayOut(){
      var arr = [4,0,7,9,0,0,2,6,0,3,1,0];

      //写法一 使用push()
      var newArr = []
      for( var count = 0 ; count<arr.length ; count++){
        if(arr[count] != 0){
          newArr.push(arr[count])
        }
      }
      console.log('替换后的数组为',newArr)

      //写法二 使用splice()
      for( var count = 0 ; count<arr.length ; count++){
        if(arr[count] == 0){
          arr.splice(count,1)
          // 原数组移出一位,需要相应地减去计数器的1位
          count--
        }
      }
      console.log('替换后的数组为',arr)

      //写法三 使用filter过滤器
      var newArr2 = arr.filter( arr => arr != 0 )
      console.log('替换后的数组为',newArr2)

      //写法四 使用forEach进行遍历
      var newArr3 = []
      arr.forEach( arr => {
        if(arr > 0){
          newArr3.push(arr)
        }
      } )
      console.log('替换后的数组为',newArr3)
    }
  }
}
</script>

猜你喜欢

转载自blog.csdn.net/Ak47a7/article/details/129693881
今日推荐