vue全家桶(一)基础知识

news2024/11/15 23:47:09

vue全家桶(一)

  • 1.vue基本使用
  • 2.vue模板语法
    • 1.差值表达式
    • 2.指令
      • 1.什么是指令
      • 2.数据绑定指令
      • 3.双向数据绑定
      • 4.事件绑定
        • 4.1@click
        • 4.2事件修饰符
        • 4.3按键修饰符
        • 4.4属性绑定
        • 4.5-指令v-model的本质
        • 4.6 样式绑定
          • 4.6.1 class样式处理
          • 4.6.2 style样式处理
        • 4.7 分支循环结构
          • 4.7.1.分支结构
          • 4.7.2.v-if和v-show的区别
          • 4.7.3.循环结构
      • 5.vue常用特性
        • 5.1自定义指令
        • 5.2计算属性
          • 1.计算属性与方法的区别
        • 5.3侦听器
        • 5.4watch和computed的区别
        • 5.5过滤器
        • 5.6生命周期
      • 6.数组相关的api
        • 1.变异方法(修改原有数据)
          • 4.1 push
          • 4.2 unshift
          • 4.3 pop()
          • 4.4 shift()
          • 4.5 splice()
            • 1.一个参数
            • 2.两个参数
            • 3. 3 或 3 个以上参数
          • 4.6 sort()
          • 4.6 reverse()
        • 2.替换数组(生成新的数组)
          • 4.7 filter()
          • 4.8 concat()
          • 4.8 concat()

1.vue基本使用

  1. 实例参数分析
  • el:元素的挂载位置(值可以是css选择器,或者DOM元素)
  • data:模型数据(值是一个对象)
  1. 差值表达式的用法
  • 将数据填充到HTML标签中
  • 差值表达式支持基本的计算操作
  1. vue代码运行原理分析
  • 概述编译过程的概念(vue语法->原生语法)

2.vue模板语法

  • 差值表达式
  • 指令
  • 事件绑定
  • 属性绑定
  • 样式绑定
  • 分支循环结构

1.差值表达式

<div>{{msg}}</div>
<div>{{1+2}}</div>

2.指令

1.什么是指令

  • 指令的本质是自定义属性
  • 指令的格式:以v-开始(比如v-bloak)
v-cloak指令的用法
1、提供样式
  [v-cloak]{
    display: none;
  }
2、在插值表达式所在的标签中添加v-cloak指令
背后的原理:先通过样式隐藏内容,然后在内存中进行值的替换,替换好之后再显示最终的结果

2.数据绑定指令

  • v-text填充纯文本
    相比差值表达式更加简洁

  • v-html填充Html片段
    存在安全问题,本网站内部数据可以使用,来自第三方的数据不可以用

  • v-pre填充原始信息
    显示原始信息,跳过编译过程(分析编译过程)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <div>{{msg}}</div>
    <div v-text='msg'></div>
    <div v-html='msg1'></div>
    <div v-pre>{{msg}}</div>
  </div>
  <script type="text/javascript" src="js/vue.js"></script>
  <script type="text/javascript">
    /*
      1、v-text指令用于将数据填充到标签中,作用于插值表达式类似,但是没有闪动问题
      2、v-html指令用于将HTML片段填充到标签中,但是可能有安全问题
      3、v-pre用于显示原始信息
    */
    var vm = new Vue({
      el: '#app',
      data: {
        msg: 'Hello Vue',
        msg1: '<h1>HTML</h1>'
      }
    });
  </script>
</body>
</html>

3.双向数据绑定

MVVM设计思想

  1. M(Model)
  2. V(View)
  3. VM(View-Model)
  • MVC 是后端的分层开发概念; MVVM是前端视图层的概念,主要关注于 视图层分离,也就是说:MVVM把前端的视图层,分为了 三部分 Model, View , VM ViewModel
  • m model
    • 数据层 Vue 中 数据层 都放在 data 里面
  • v view 视图
    • Vue 中 view 即 我们的HTML页面
  • vm (view-model) 控制器 将数据和视图层建立联系
    • vm 即 Vue 的实例 就是 vm
  • 当数据发生变化的时候,视图也就发生变化
  • 当视图发生变化的时候,数据也会跟着同步变化

分而治之,把不同的业务代码放在不同的模块当中,再通过特定的逻辑把它们组织到一块
从视图到模型,用的是事件监听;从模型到视图用的是数据绑定

  <!DOCTYPE html>
  <html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <div>{{msg}}</div>
      <div>
        <input type="text" v-model='msg'>
      </div>
    </div>
    <script type="text/javascript" src="js/vue.js"></script>
    <script type="text/javascript">
      /*
        双向数据绑定
        1、从页面到数据
        2、从数据到页面
      */
      var vm = new Vue({
        el: '#app',
        data: {
          msg: 'Hello Vue'
        }
      });
    </script>
  </body>
  </html>

4.事件绑定

4.1@click

//v-on:
<button v-on:click='num++'>点击</button>
//简写
<button @click='num++'>点击1</button>
  1. 如果事件直接绑定函数名称,那么默认会传递事件对象作为事件函数的第一个参数
  2. 如果事件绑定函数调用,那么事件对象必须作为最后一个参数显示传递,并且事件对象的名称必须是$event
<div>{{num}}</div>
//一、不传参,下面两种没有什么区别
//1.直接绑定函数名称
<el-button type="primary" @click="btnHandler1">+1</el-button>
//2.调用函数
<el-button type="primary" @click="btnHandler1()">+1</el-button>
//二、获取事件对象
//1.直接绑定函数名称,默认传事件对象
<el-button type="primary" @click="btnHandler2">+1</el-button>
//2.调用函数,需要在括号中传递$event,且是固定的
<el-button type="primary" @click="btnHandler2($event)">+1</el-button>
//三、普通参数和事件对象
<el-button type="primary" @click="btnHandler3(123,456,$event)">+1</el-button>
  data() {
    return {
      num: 0,
    }
  },
  // methods  中 主要是定义一些函数
  methods: {
    btnHandler1() {
       // 这里的this是Vue的实例对象+
      this.num++
      //   在函数中 想要使用data里面的数据 一定要加this 
    },
    btnHandler2(event) {
      this.num++
      console.log("p", event,event.target.innerHTML);
    },
    btnHandler3(p, p1, event) {
      this.num++
      console.log("p", p, p1, event,event.target.innerHTML);
    },
  }

4.2事件修饰符

vue官网api中所有的事件修饰符:
https://v2.cn.vuejs.org/v2/api/#v-on

  • .stop 阻止冒泡
    <div v-on:click='handle0'>
      <button v-on:click.stop='handle1'>点击1</button>
    </div>
  • .prevent阻止默认行为
//a标签默认会跳转
<div>
  <a href="http://www.baidu.com" v-on:click.prevent='handle2'>百度</a>
</div>
      methods: {
        handle0: function(){
          this.num++;
        },
        handle1: function(event){
          // 阻止冒泡
          // event.stopPropagation();
        },
        handle2: function(event){
          // 阻止默认行为
          // event.preventDefault();
        }
      }

4.3按键修饰符

vue全局监听Esc,enter按键事件
1.自定义事件修饰符

  <div id="app">
    <input type="text" v-on:keyup.aaa='handle' v-model='info'>
  </div>
  <script type="text/javascript" src="js/vue.js"></script>
  <script type="text/javascript">
    /*
      事件绑定-自定义按键修饰符
      规则:自定义按键修饰符名字是自定义的,但是对应的值必须是按键对应event.keyCode值
    */
    Vue.config.keyCodes.aaa = 65
    var vm = new Vue({
      el: '#app',
      data: {
        info: ''
      },
      methods: {
        handle: function(event){
          console.log(event.keyCode)
        }
      }
    });
  </script>

2.监听按键,并进行操作

created() {
    window.addEventListener("keyup", this.enterSearch)
  },
  methods:{
    clearContent3() {
      // 按!键
      console.log("this.uname1");
    },
    enterSearch(e) {
    	//监听回车
      console.log("e.keyCode",e.keyCode);
        if (e.keyCode === 49) {
        	//在这里写你的操作逻辑
            this.clearContent3()
        }
    },
  },

4.4属性绑定

动态处理属性
v-bind指令用法

<a v-bind:href="url" >跳转</a>

缩写形式

<a :href="url" >跳转</a>
  • 我们可以给v-bind:class 一个对象,以动态地切换class。
  • 注意:v-bind:class指令可以与普通的class特性共存
<script type="text/javascript">
    /*
      属性绑定
    */
    var vm = new Vue({
      el: '#app',
      data: {
        url: 'http://www.baidu.com'
      },
      methods: {
        handle: function(){
          // 修改URL地址
          this.url = 'http://itcast.cn';
        }
      }
    });
  </script>

4.5-指令v-model的本质

v-bind去绑定value的值,用v-on去绑定input事件,使用输入域中的最新的数据覆盖原来的数据,完成了数据的双向绑定

 <div id="app">
    <div>{{msg}}</div>
    <input type="text" v-bind:value="msg" v-on:input='handle'>
    <input type="text" v-bind:value="msg" v-on:input='msg=$event.target.value'>
    <input type="text" v-model='msg'>
  </div>
  <script type="text/javascript" src="js/vue.js"></script>
  <script type="text/javascript">
    /*
      v-model指令的本质
    */
    var vm = new Vue({
      el: '#app',
      data: {
        msg: 'hello'
      },
      methods: {
        handle: function(event){
          // 使用输入域中的最新的数据覆盖原来的数据
          this.msg = event.target.value;
        }
      }
    });
  </script>

4.6 样式绑定

4.6.1 class样式处理

1.class样式处理

  • 对象语法
<div :class="{active:isActive}"> </div>
  • 数组语法
<div :class="[activeClass,errorClass]"> </div>

绑定对象和绑定数组 的区别

  • 绑定对象的时候 对象的属性 即要渲染的类名 对象的属性值对应的是 data 中的数据
  • 绑定数组的时候数组里面存的是data 中的数据
<div style="margin:20px 0;">
    <!-- class样式绑定-对象 -->
    <div :class="{active:isActive,error:isError}"> 测试样式1</div>
    
    <!-- class样式绑定-数组 -->
    <div :class='[isActive?"active":"", isError?"error":""]'>测试样式</div>
    
    <!--:class='currentIndex==index?"active":""'-->
    
    <el-button type="primary" @click="btnHandler4">切换1</el-button>
</div>
<div style="margin:20px 0;">
   <!-- class对象和数组可以组合使用 -->
   <div :class="[activeclass,errorClass,{test:isTest}]"> 测试样式2</div>
   <!-- class简化操作-数组 -->
   <div :class="arrClass"> 测试样式3</div>
   <!-- class简化操作-对象 -->
   <div :class="objClass"> 测试样式4</div>
   <el-button type="primary" @click="btnHandler5">切换2</el-button>
</div>
  data() {
    return {
      isActive: true,
      isError:true,
      activeclass:"active",
      errorClass:"error",
      isTest:true,
      arrClass:["active","error"],
      objClass:{
        active:true,
        error:true,
      },
    }
  },
  methods:{
       // 切换class,展示不展示
    btnHandler4(){
      // 控制isActive的值在true和false之间进行切换
      this.isActive=!this.isActive
      this.isError=!this.isError
    },
    btnHandler5(){
        this.errorClass=this.errorClass?"":"error"
        this.isTest=!this.isTest
        this.objClass.error=!this.objClass.error
        this.arrClass[0] = this.arrClass[0]?"":"active"
        this.arrClass[1] = this.arrClass[1]?"":"error"
    },
  },

<style scoped>
.active {
  border: 3px solid pink;
  height: 100px;
  width: 100px;
}
.error {
  background-color: orangered;
}
.test {
  color:blue;
}
</style>
4.6.2 style样式处理
    <div style="margin:20px 0;">
      <!-- style对象 -->
      <!-- CSS 属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用单引号括起来)    -->
      <div :style="{border:borderstyle,height:heightStyle,width:widthStyle}"> 测试样式5</div>
      <!-- style -对象 -->
      <div :style="objStyles"> 测试样式6</div>
      <!-- style -数组 -->
      <div :style="[objStyles,overrideStyles]"> 测试样式7</div>
      <el-button type="primary" @click="btnHandler6">切换3</el-button>
    </div>

  data() {
    return {
      // style
      borderstyle: "1px solid blue",
      heightStyle: "100px",
      widthStyle: "100px",
      objStyles: {
        border: "10px solid pink",
        height: "100px",
        width: '200px',
      },
      overrideStyles: {
        border: "5px solid blue",
        height: "200px",
        width: '100px',
        background: "green"
      }
    }
  },


    btnHandler6() {
      this.overrideStyles.height = "100px"
      this.objStyles.width = "100px"
    },

4.7 分支循环结构

4.7.1.分支结构
  • v-if
  • v-else-if
  • v-else
  • v-show
4.7.2.v-if和v-show的区别
  • v-if控制元素是否渲染到页面
  • v-show控制元素是否显示(已经渲染到了页面)
  • 1- 多个元素 通过条件判断展示或者隐藏某个元素。或者多个元素
  • 2- 进行两个视图之间的切换

区别

  • v-show本质就是标签display设置为none,控制隐藏
    • v-show只编译一次,后面其实就是控制css,而v-if不停的销毁和创建,故v-show性能更好一点。
  • v-if是动态的向DOM树内添加或者删除DOM元素
    • v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件
   <div>
      <div v-if='score>=90'>优秀</div>
      <!-- v-else-if紧跟在v-if或v-else-if之后   表示v-if条件不成立时执行-->
      <div v-else-if='score<90&&score>=80'>良好</div>
      <div v-else-if='score<80&&score>60'>一般</div>
      <!-- v-else紧跟在v-if或v-else-if之后-->
      <div v-else>比较差</div>
      <!-- v-show的原理:控制元素样式是否显示 display:none -->
      <div v-show='flag'>测试v-show</div>
      <el-button type="primary" @click='btnHandler7'>点击</el-button>
    </div>
  data() {
    return {
      score: 10,
      flag: false,
    }
   },

    btnHandler7() {
      this.flag = !this.flag;
    },
4.7.3.循环结构
    <!-- 分支循环结构-遍历数组 -->
    <ul>
      <!-- key的作用:帮助vue区分不同的元素,从而提高性能 -->
      <li v-for='item in fruits' :key='item.id'>{{item}}</li>
      <li v-for='(item, index) in fruits' :key='item.id'>{{item + '---' + index}}</li>
      <li :key='item.id' v-for='item in myFruits'>
        <span>{{item.ename}}</span>
        <span>-----</span>
        <span>{{item.cname}}</span>
      </li>
    </ul>
    <!-- 分支循环结构-遍历对象 -->
    <div v-for='(v,k,i) in obj' :key="k">{{v + '---' + k + '---' + i}}</div>

5.vue常用特性

  • 自定义指令
  • 计算属性
  • 过滤器
  • 侦听器
  • 生命周期

5.1自定义指令

Vue实现el-dialog对话框 拖拽位置、放大缩小
https://blog.csdn.net/ingenuou_/article/details/123924160

5.2计算属性

使用计算属性可以使模板变的更加整洁

添加一个新的属性computed,通过函数的方式来定义计算属性,使用的时候,直接访问函数名(不需要添加括号),函数体中,具体来实现计算逻辑,return是必须要加的,只有return之后才能获取到计算属性的结果,计算属性是基于data中的数据进行处理的

    <!-- computed的用法,基于data中的数据 -->
    <div>
      <div>{{msg}}</div>
      <div>{{reverseString}}</div>
      <el-button type="primary" @click='btnHandler8'>更改data中的msg数据</el-button>
      <!-- 只要msg中的数据变化,computed呈现的数据也跟着变化 -->
    </div>

   msg:"hello",

   computed: {
    reverseString() {
      return this.msg.split('').reverse().join('');
    }
   },
   methods: {
    btnHandler8(){
      this.msg=this.msg=='happy'?'hello':'happy'
    },
   }
1.计算属性与方法的区别
  • 计算属性是基于它们的依赖进行缓存,节省一定的
  • 方法不存在缓存
    <!-- 计算属性与方法的区别:计算属性是基于依赖进行缓存的,而方法不缓存 -->
    <div>
      <div>{{reverseString}}</div>
      <div>{{reverseString}}</div>
      <div>{{reverseMessage()}}</div>
      <div>{{reverseMessage()}}</div>
    </div>
  computed: {
    reverseString() {
      // 基于data中依赖的数据不变,computed只会调用一次,再调用的用缓存的数据;发生变化才会再次调用
      return this.msg.split('').reverse().join('');
    }
  },
methods: {
    reverseMessage() {
      // 每调用一次,就会调一次
      console.log('methods')
      return this.msg.split('').reverse().join('');
    }
}

5.3侦听器

应用场景:数据变化时执行异步或者开销比较大的操作
在这里插入图片描述

<el-input type="text" v-model='username' />

username: ""

  watch: {
    // 优点:可以通过 immediate 控制侦听器自动触发一次
    username: {
      // 可以控制侦听器自动触发一次 ,默认为false
      immediate: true,
      // 开启深度监听,只要对象中任何一个属性变化了,都会触发对象的侦听器
      deep: true,
      handler(newval, oldval) {
        console.log(newval, oldval);
      },
    },
  },

5.4watch和computed的区别

watch和computed各自处理的数据关系场景不同

1.watch擅长处理的场景:一个数据影响多个数据
2.computed擅长处理的场景:一个数据受多个数据影响

  • computed支持缓存,相依赖的数据发生改变才会重新计算;watch不支持缓存,只要监听的数据变化就会触发相应操作
  • computed不支持异步,当computed内有异步操作时是无法监听数据变化的;watch支持异步操作
  • computed属性的属性值是一函数,函数返回值为属性的属性值,computed中每个属性都可以设置set与get方法。watch监听的数据必须是data中声明过或父组件传递过来的props中的数据,当数据变化时,触发监听器

5.5过滤器

在这里插入图片描述

5.6生命周期

   /*
      Vue实例的生命周期
      
    */
    var vm = new Vue({
      el: '#app',
      data: {
        msg: '生命周期'
      },
      methods: {
        update: function(){
          this.msg = 'hello';
        },
        destroy: function(){
          this.$destroy();
        }
      },
      beforeCreate: function(){
        console.log('beforeCreate');
      },
      created: function(){
        console.log('created');
      },
      beforeMount: function(){
        console.log('beforeMount');
      },
      mounted: function(){
        console.log('mounted');
      },
      beforeUpdate: function(){
        console.log('beforeUpdate');
      },
      updated: function(){
        console.log('updated');
      },
      beforeDestroy: function(){
        console.log('beforeDestroy');
      },
      destroyed: function(){
        console.log('destroyed');
      }
    });
  

6.数组相关的api

  1. 变异方法(修改原有数据)

    • push()
    • unshift()
    • pop()
    • shift()
    • splice()
    • sort()
    • reverse()
  2. 替换数组(生成新的数组)

  • filter()
  • concat()
  • slice()

1.变异方法(修改原有数据)

4.1 push

1、定义和用法:
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
注意: 新元素将添加在数组的末尾。
注意: 此方法改变数组的长度。
提示: 在数组起始位置添加元素请使用 unshift() 方法。

2、语法:
array.push(item1, item2, …, itemX)

3、实例:
添加一个以上元素

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var len = fruits2.push("Kiwi","Lemon","Pineapple")
consloe.log('len2 ',len2 )//7
consloe.log('fruits',fruits)//["Banana", "Orange", "Apple", "Mango", "Kiwi", "Lemon", "Pineapple"]

以上实例将输出
[“Banana”, “Orange”, “Apple”, “Mango”, “Kiwi”, “Lemon”, “Pineapple”]

4.2 unshift

1、定义和用法:
unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
注意: unshift() 方法将把它的参数插入 arrayObject 的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。该方法的第一个参数将成为数组的新元素 0,如果还有第二个参数,它将成为新的元素1,以此类推。
注意,unshift() 方法不创建新的创建,而是直接修改原有的数组。
注意: 此方法改变数组的长度。

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var len = fruits.unshift("Kiwi","Lemon","Pineapple");
console.log('len ',len )//7
console.log('fruits',fruits)//["Kiwi", "Lemon", "Pineapple", "Banana", "Orange", "Apple", "Mango"]

4.3 pop()

1、定义和用法:
pop() 方法用于删除并返回数组的最后一个元素。
注意: 返回值array 的最后一个元素。
注意: 此方法改变数组的长度。

pop() 方法将删除 array 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。

var fruits = ["Banana", "Orange", "Apple", "Mango", "Kiwi", "Lemon", "Pineapple"];
let current = fruits.pop()
console.log('current ',current )//Pineapple
console.log('fruits',fruits)
// ["Banana", "Orange", "Apple", "Mango", "Kiwi", "Lemon"]
4.4 shift()

1.定义和用法
删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined

var fruits = ["Banana", "Orange", "Apple", "Mango", "Kiwi", "Lemon", "Pineapple"];
let current= fruits.shift()
console.log('current',current)//Banana
console.log('fruits ',fruits)
// ["Orange", "Apple", "Mango", "Kiwi", "Lemon", "Pineapple"]
4.5 splice()

splice 方法用于数组或伪数组,根据参数个数和形式的不同,可以在数组中删除指定元素或者插入元素、替换元素。

用于删除并返回删除的数组

删除,插入,替换

1.一个参数
arr.splice(i)

当 splice 方法的参数只有 1 个的时候(i),表示删除数组中索引为 i 及 i 之后的所有元素。返回删除的元素,数组原地修改。其中,参数 i 是整数。
对于 i 分情况:

  • i 为非负整数:删除数组中索引为 i 及 i 之后位置上所有的元素
  • i 为负整数:索引从后往前计算,最后一位索引是 -1,倒数第二位是 -2,依次类推。删除 i 及 i 之后的所有元素。
  • i表示索引,删除时,从左往右删除
let fruits3=[
    {name:"张三1",id:"1"},
    {name:"张三2",id:"2"},
    {name:"张三3",id:"3"},
    {name:"张三4",id:"4"},
]
let delData=fruits3.splice(-2)
//删除倒数第二个数到最后一个数,也就是下标[2,3]
console.log('delData',delData)
//[{name: "张三3", id: "3"},{name: "张三4", id: "4"}]
console.log('fruits3',fruits3)
//[{name: "张三1", id: "1"},{name: "张三2", id: "2"}]  
fruits3.splice(0)//清空数组
console.log('fruits3',fruits3)//[]
2.两个参数
arr.splice(i, j)

当 splice 方法有两个参数时,两个参数必须均为整数。表示从数组中索引为 i 开始删除,一共删除 j 个元素。

var fruits = ["Banana", "Orange", "Apple", "Mango", "Kiwi", "Lemon", "Pineapple"];
fruits.splice(0,fruits.length)//["Banana", "Orange", "Apple", "Mango", "Kiwi", "Lemon", "Pineapple"]
fruits//[]
var fruits =  ["Banana", "Orange", "Apple", "Mango", "Kiwi", "Lemon", "Pineapple"]
fruits.splice(-2,2)// ["Lemon", "Pineapple"]
console.log(fruits.splice(1, -10)) //[],没有删除数据,第二项为删除的数量,小于等于0,都不会删除
3. 3 或 3 个以上参数

语法

a.splice(i, j, e1, e2, ...)
  • i:整数,表示索引的起始位置
  • j:整数,表示删除的个数
  • e1、e2、…:删除相应元素之后要添加的元素

当 splice 方法有 3 个参数时,表示从索引为 i 位置开始删除 j 个元素,然后在从 i 位置添加 e1,e2,…,返回删除的元素,原地修改。

  • 若 j 为 0,则表示一个元素也不删除,则元素从 i 前一个位置开始插入
  • 若 j > 0,则表示从 i 位置开始(包括 i 位置)删除 j 个元素,然后从 i 后面开始插入。
let list=[1,2,4,4,2,1,3,1]
list.splice(2, 2,5,5,5)// [4, 4]
list// [1, 2, 5, 5, 5, 2, 1, 3, 1]

j为0时,不删除,但是会添加

let list1=[1,2,4,4,2,1,3,1]
list1.splice(2,0,6,6,6)
list1 //[1, 2, 6, 6, 6, 4, 4, 2, 1, 3, 1]
4.6 sort()
sort() 方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串Unicode码点。
会改变原数组

1.没有参数

var list = ['General','Tom','Bob','John','Army'];
list.sort()// ["Army", "Bob", "General", "John", "Tom"]
list// ["Army", "Bob", "General", "John", "Tom"]

2.升序,降序

//升序
var list1 = [3,2,1,4,6,2,3,4,1,3,5];
list1.sort((a,b)=>{
return a - b;
})
// [1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 6]
list1
//  [1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 6]
//降序
var list1 = [3,2,1,4,6,2,3,4,1,3,5];
list1.sort((a,b)=>{
return b - a;
})
(11) [6, 5, 4, 4, 3, 3, 3, 2, 2, 1, 1]
list1
(11) [6, 5, 4, 4, 3, 3, 3, 2, 2, 1, 1]
4.6 reverse()

reverse() 方法用于颠倒数组中元素的顺序。返回颠倒后的数组

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();//["Mango", "Apple", "Orange", "Banana"]
fruits//["Mango", "Apple", "Orange", "Banana"]

2.替换数组(生成新的数组)

4.7 filter()

filter用于对数组进行过滤。
它创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

注意:filter()不会对空数组进行检测、不会改变原始数组

必须有return

let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let res1 = nums.filter((num) => {
    return num > 5;
});
console.log('res1', res1);//[6, 7, 8, 9, 10]
console.log('nums', nums);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let list = [{
    name: "张三",
    number: 1,
}, {
    name: "李四",
    number: 2,
}, {
    name: "王五",
    number: 3,
}, ]
let res = list.filter((item) => {
    console.log('item', item);
    return item.number > 2
})
console.log('res111', res);//[{name: "王五",number: 3}]
console.log('list111', list);
//  [{name: "张三",number: 1,}, {name: "李四",number: 2,}, {name: "王五",number: 3,}, ]

4.8 concat()

concat() 方法用于连接两个或多个数组。

该方法不会改变现有的数组,而是返回一个新的数组。

array1.concat(array2, array3,…, arrayX)

const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2)
array3 // ["a", "b", "c", "d", "e", "f"]
const array4 = array1.concat(array2,array3)
array4 //["a", "b", "c", "d", "e", "f", "a", "b", "c", "d", "e", "f"]
4.8 concat()
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);
array3 //["a", "b", "c", "d", "e", "f"]
const array4 = array1.concat(array2, array3);
array4 // ["a", "b", "c", "d", "e", "f", "a", "b", "c", "d", "e", "f"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch深度强化学习案例:基于DQN实现Flappy Bird游戏与分析

目录1 案例介绍2 构造深度Q网络3 经验回放与目标网络4 训练流程5 实验分析1 案例介绍 Flappy Bird是一款由来自越南的独立游戏开发者Dong Nguyen所开发的作品&#xff0c;于2013年5月24日上线。 在Flappy Bird中&#xff0c;玩家只需要用一根手指来操控&#xff1a;点击一次屏…

P49 BFC 块级格式化上下文 块级格式化上下文 BFC渲染区域: 创建BFC的元素,它的自动高度需要计算浮动元素. 高度塌陷例子

目录块级格式化上下文BFC渲染区域:创建BFC的元素&#xff0c;它的自动高度需要计算浮动元素.高度塌陷例子&#xff1a;第一种方法 clearfix::after第二种解决办法 :绝对定位第三种解决办法&#xff1a;overflow: scroll;第四种方法&#xff1a;clearfix hidden创建BFC的元素&am…

21版本FL Studio水果音乐制作软件下载

因为对音乐有一些了解&#xff0c;所以周边有不少朋友会问我很多关于音乐的问题&#xff0c;其中比较多是学习音乐到底用哪款软件比较好。每次遇到这样的问题&#xff0c;我都会告诉他们&#xff0c;就是我一直在用的音乐制作软件FL Studio。音乐制作软件FL Studio&#xff0c;…

【JavaGuide面试总结】Java集合篇·中

【JavaGuide面试总结】Java集合篇中1.Collection 子接口之 SetComparable 和 Comparator 的区别比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同2.Collection 子接口之 QueueQueue 与 Deque 的区别ArrayDeque 与 LinkedList 的区别说一说 PriorityQueue3.Map 接口HashMap 的…

机器学习(八):深度学习简介

文章目录 深度学习简介 一、神经网络简介 二、深度学习各层负责内容 深度学习简介 一、神经网络简介 深度学习&#xff08;Deep Learning&#xff09;&#xff08;也称为深度结构学习【Deep Structured Learning】、层次学习【Hierarchical Learning】或者是深度机器学习【…

React中commit阶段发生了什么

对于commit阶段的主要工作是循环effectList链表去将有更新的fiber节点应用到页面上是commit的主要工作。 EffectList 什么是副作用&#xff1f; 函数在执行过程中对外部造成的影响可以称之为副作用&#xff0c;副作用包含的类型很多&#xff0c;比如说标记值为Placement时&a…

客快物流大数据项目(一百零九):Spring Boot概述

文章目录 Spring Boot概述 一、什么是SpringBoot 二、​​​​​​​为什么要学习Spring Boot

PHP转Go实践:xjson解析神器「开源工具集」

前言 近期会更新一系列开源项目的文章&#xff0c;新的一年会和大家做更多的开源项目&#xff0c;也欢迎大家加入进来。 xutil 今天分享的文章源自于开源项目jinzaigo/xutil的封装。 在封装过程中&#xff0c;劲仔将实现原理以及相关实践思考&#xff0c;写成文章分享出来&am…

Python3学习——条件控制、循环语句与迭代器

目录 一、编程第一步——斐波那契数列 二、条件控制 (一)if/else语句 判断狗狗的年龄&#xff1a; (二)多层if/else嵌套 判断数字能否被2或3整除&#xff1a; (三)match...case匹配——python3中新增 根据数字判断星期&#xff1a; 三、循环语句 (一)while循环 1.循环…

Java:Idea创建项目和Spring工程基本使用

一、创建项目 1、创建新的空的项目&#xff1a; Empty Project–next 2、定义项目的名称&#xff0c;并指定位置 3、对项目进行设置&#xff0c;JDK版本、编译版本 4、添加模块信息 5、修改maven路径 6、项目目录结构 二、搭建Spring的框架 1、在核心配置文件中添加Spring的j…

C++11 并发指南五(stdcondition_variable 详解)

C11 并发指南五(std::condition_variable 详解) 文章目录C11 并发指南五(std::condition_variable 详解)std::condition_variable 类介绍std::condition_variable_any 介绍std::cv_status 枚举类型介绍std::notify_all_at_thread_exit前面三讲《 C11 并发指南二(std::thread 详…

二叉树简单解析(1)

&#x1f340;本人简介&#xff1a; 吉师大一最爱逃课的混子、 华为云享专家、阿里云专家博主、腾讯云自媒体分享计划博主、 华为MindSpore优秀开发者、迷雾安全团队核心成员&#xff0c;CSDN2022年运维与安全领域第15名 &#x1f341;本人制作小程序以及资源分享地址&#x…

英语学习打卡day7

2023.1.27 1.ironically adv.具有讽刺意味的是;反讽地&#xff0c;讽刺地 Ironically, his cold got better on the last day of his holiday. 2.bequeath vt.遗赠;把…遗赠给;把… .传给 (比give更正式) bequeath sb sth bequeath sth to sb Don’t bequeath the problem …

JDK17 || JDK 8 完美 卸载 教程 (Windows版)

文章目录一、卸载jdk程序1 . 找到控制面板2. 卸载程序3. 找到JDK 相关的程序4. 右键 选择卸载程序5. 下一步 选择 是6.下一步 选择 是二、安装 新版 JDK三、如果不想再使用jdk环境结语一、卸载jdk程序 1 . 找到控制面板 2. 卸载程序 3. 找到JDK 相关的程序 4. 右键 选择卸载程…

IDEA界面和控制台的滚动条颜色不明显?赶快换一个吧!

前言 不知道大家是否和我一样有这么一个烦恼&#xff1a; IDEA自带的滚动条颜色很暗&#xff0c;配上一些主题颜色搭配很难发现。 所以今天就想着怎么可以修改滚动条颜色&#xff0c;首先去网上搜了搜都是什么鼠标滚轮加shift滚动&#xff0c;一点也不实用 偶然看到了个不错的…

【青训营】Go的BenchMark的使用

本文内容总结于 字节跳动青年训练营 第五届后端组 Go自带了一些性能测试工具&#xff0c;其中BenchMark是较为重要的一个。 我们以计算斐波那契数列的示例来展示BenchMark的使用 package Benchmarkimport "testing"func Fib(n int) int {if n < 2 {return n}ret…

OpenCV-PyQT项目实战(1)安装与环境配置

本系列从零开始实战解说基于 PyQt5 的 OpenCV 项目开发。 欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;OpenCV导入图像 文章目录1. PyQt5 …

初识图像分类——K近邻法(cs231n assignment)

作者&#xff1a;非妃是公主 专栏&#xff1a;《计算机视觉》 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 专栏系列文章 Cannot find reference ‘imread‘ in ‘init.py‘ error: (-209:Sizes of input arguments…

ppt神器islide 第1节 初步接触强大的工具-资源篇

ppt神器islide 第1节 初步接触强大的工具1 PPT大神的课程总结1.1 骨架篇1.2 色彩篇1.3 对齐篇1.4 对比篇1.5 修饰篇1.6 字体篇1.7 素材篇1.8 线条篇1.8.1 可以随意画线条&#xff0c;填充空白1.8.2 在字体上画线条&#xff0c;做成艺术字1.8.3 做对称线条&#xff0c;比如递进三…

[Vulnhub] DC-3

下载链接&#xff1a;DC-3 DC-3需要 把IDE里面的改成IDE 0:0 不然无法打开 知识点&#xff1a; Joomla cms 3.7.0 sql注入漏洞cmseek工具探测cms指纹john解密proc_popen反弹shellpython -m http.server开启http服务 & wget远程下载ubuntu16.0.4 Linux 4.4.0-21 系统漏…