zoukankan      html  css  js  c++  java
  • vue检测数组更新的几个方法

    检测数组更新

    • 因为Vue是响应式的,所以当数据发生变化时,Vue会自动检测数据变化,视图会发生对应的更新。

    • Vue中包含了一组观察数组编译的方法,使用它们改变数组也会触发视图的更新。

    方法

    1. push(): 添加

    2. pop(): 删除数组中的最后一个元素

    3. shift(): 删除数组中的第一个元素

    4. unshift(): 在数组最前面添加元素

    5. splice作用:删除元素,插入元素,替换元素

    6. sort() 排序

    7. reverse() 反转

    代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <script src="../js/vue.js"></script>
    </head>
    <body>
      <div id="app">
        <ul>
          <li v-for="(item, index) in letters">{{item}}</li>
        </ul>
        <button @click="btnClick">按钮</button>
      </div>
    
      <script>
        const vm = new Vue({
          el: '#app',
          data: {
            letters: ['A','B','C','D','E']
          },
          methods: {
            btnClick() {
              // 1.push方法
              // this.letters.push('aaaa')
              // this.letters.push('aaa','bbb','ccc')
    
              // 2.pop(): 删除数组中的最后一个元素
              // this.letters.pop(); 
    
              // 3.shift(): 删除数组中的第一个元素
              // this.letters.shift(); 
              
              // 4.unshift(): 在数组最前面添加元素
              // this.letters.unshift() 
              // this.letters.unshift('aaa','bbb','ccc') 
    
              // 5.splice作用:删除元素,插入元素,替换元素
              // 删除元素:第二个参数传入你要删除几个元素(如果没有传,就删除后面所有的元素)
              // 替换元素:第二个参数,表示我们要替换几个元素,后面是用于替换前面的元素
              // 插入元素:第二个参数,传入0,并且后面跟上要插入的元素
              // splice(start)
              // const start = 2
              // this.letters.splice(start, this.letters.length-start)
              // this.letters.splice(1, 3,'m','n','l')
              // this.letters.splice(1, 3)
              // this.letters.splice(1, 0,'a','b','v')
    
              // 6.sort() 排序
              // this.letters.sort()
    
              // 7.reverse() 反转
              // this.letters.reverse()
    
              // 注意.通过索引值修改数组中的元素,不建议,因为这个不是响应式的
              // this.letters[0] = 'bbbb'
              this.letters.splice(0, 1, 'aaa') // 建议用splice
              // Vue.set(this.letters,0,'aaa')
            }
          },
        })
      </script>
    </body>
    </html>

    编程范式

    1. 从计算机指定方面出发

      1. 命令式编程

      2. 声明式编程

    2. 也可以分为

      1. 面向对象编程(第一公民:对象)

      2. 函数式编程(第一公民:函数)

    filter函数的使用

    filter中回调函数有一个要求:必须返回一个boolean

    true: 当返回true时,函数内部会自动将这次回调的n加入到新的数组中

    false:当返回false时,函数内部会过滤掉这次的n

         const nums = [10,20,111,222,444,40,50]
     
        // 1.filter函数的使用
        let newNums = nums.filter(function(n) {
          return n<100
         })
         console.log(newNums)

    map函数的使用

         // 2.map函数的使用
        let new2Nums = newNums.map(function(n) {
          return n * 2
        })  
        console.log(new2Nums)

    reduce函数的使用

         //3.reduce函数的使用
        let total = new2Nums.reduce(function(preValue,n){
          return preValue+n
        },0)
        console.log(total)

     代码:

    需求:将数组中小于100的数乘以2后,求和

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <script src="../js/vue.js"></script>
    </head>
    <body>
      <div id="app">
    
      </div>
    
      <script>
        const nums = [10,20,111,222,444,40,50]
    
        // 1.filter函数的使用
        let newNums = nums.filter(function(n) {
          return n<100
        })
        console.log(newNums)
    
        // 2.map函数的使用
        let new2Nums = newNums.map(function(n) {
          return n * 2
        })  
        console.log(new2Nums)
    
        //3.reduce函数的使用
        let total = new2Nums.reduce(function(preValue,n){
          return preValue+n
        },0)
        console.log(total)
    
        // 函数式编程
        let total2 = nums.filter(function(n){
          return n<100
        }).map(function(n) {
          return n*2
        }).reduce(function(preValue,n){
          return preValue + n
        },0)
        console.log(total2) 
    
        //lambel表达式
        let sumNums = nums.filter(n => n<100).map(n => n*2).reduce((a,b)=>(a+b))
        console.log(sumNums) 
      </script>
    </body>
    </html>
  • 相关阅读:
    【洛谷 4613】Olivander
    【洛谷 1385】密令
    【洛谷 4439】Aron
    【洛谷 3383】线性筛素数
    【洛谷 2412】查单词
    【洛谷 1980】计数问题
    【洛谷 3372】(模板)线段树 1
    Luogu P3743 kotori的设备
    Luogu P2340 [USACO03FALL]Cow Exhibition G
    Luogu P3047 [USACO12FEB]Nearby Cows G
  • 原文地址:https://www.cnblogs.com/LEPENGYANG/p/15793690.html
Copyright © 2011-2022 走看看