vue高阶用法,vue函数式编程

  vue高阶用法,vue函数式编程

  本文主要介绍vue常用的高阶函数和综合案例。文章内容很清晰,对这方面感兴趣的同学可以研究一下。

  

一. 常用的数组的高阶函数

  假设,现在有了一个数组,我们要对数组进行如下的列操作。

  找出小于100的数字:

  将所有小于100的数乘以2:

  以2为基础,对所有数字求和:

  我们通常做什么?

  !声明文档类型

  html lang=en

  头

  meta charset=UTF-8

  标题标题/标题

  /头

  身体

  div id=应用程序

  p查找小于100的数字:/p

  p将所有小于100的数乘以2:/p。

  p对所有数字求和:/p

  Button @click=getNum()计算/button

  /div

  脚本src=./js/vue.js/script

  脚本

  const app=new Vue({

  埃尔: #app ,

  数据:{

  nums: [10,20,100,30,320,55,80,210],

  num1:0,

  num2:0,

  num3:0

  },

  方法:{

  getNum(){

  //1.找出100的数字

  设newNum1=[]

  for(let num of this.nums) {

  如果(编号100) {

  newNum1.push(数字)

  }

  }

  this.num1=newNum1

  console.log(newNum1)

  //2.对于小于100 *2的数字

  设newNum2=[]

  for(let num of newNum1) {

  newNum2.push(num * 2)

  }

  this.num2=newNum2

  console.log(newNum2)

  //3.将小于100的数字*2相加。

  设new num 3=0;

  for(let num of newNum2) {

  newNum3=num

  }

  this.num3=newNum3

  console.log(newNum3)

  }

  }

  })

  /脚本

  /body

  /html

  在上面的演示中,我们都使用了循环来计算,最终达到了预期的结果。单击计算按钮查看计算结果:

  js高阶函数中,有一些高阶函数可以直接计算得到上述效果。这里有三个高阶函数

  过滤器

  地图

  减少

  

1. filter函数

  filter()方法会创建一个新数组,原数组的每个元素都会被传入回调函数,回调函数有返回值。如果返回值为真,这个元素将被保存在新数组中;如果返回值为false,该元素将不会保存在新数组中;原始数组不会改变。

  语法:array.filter(函数(当前值,索引,数组),此值)

  参数

  举例1: 返回数组中100的元素

  getNums() {

  //我们来看看filter let num 1=[10,20,100,30,320,55.80,210]的用法

  设new num 1=this . nums . filter(function(num){

  返回编号100;

  })

  console.log(newNum1)

  }

  filter()函数的参数是函数,参数是新数组。

  该函数也有参数,这里只传入第一个参数,这意味着:循环遍历期间的数组元素。

  函数的返回值类型为true或false。如果返回结果为真,则在新数组中返回该元素;如果返回结果为false,则该元素不会在新数组中返回。

  举例2:利用filter,可以巧妙地去除Array的重复元素:

  filter()接收的回调函数实际上可以有多个参数。通常,我们只使用第一个参数来表示数组的一个元素。回调函数还可以接收另外两个参数,分别表示元素和数组本身的位置:

  设nums=[10,20,100,30,320,55,80,210,20,55,320]

  设new num 2=this . nums . filter(function(element,index,self) {

  返回self.indexOf(element)==index

  })

  运行结果

  [10, 20, 100, 30, 320, 55, 80, 210]

  移除重复元素依赖于indexOf总是返回第一个元素的位置,后续的重复元素不等于indexOf返回的位置,所以被filter过滤掉。

  

2. map函数

  方法返回一个新数组,新数组中的每个元素都是调用函数后每个元素对应的原数组的值;空数组将不会被编辑,原始数组也不会被更改。

  语法:array.every(函数(项,索引,数组){})

  参数:

  举例1: 求数组中所有元素*2后的数组

  设nums=[10,20,100,30,320,55,80,210,20,55,320]

  设new num 1=this . nums . map(function(num){

  返回num * 2;

  })

  console.log(newNum1)

  输出结果:

  [20, 40, 200, 60, 640, 110, 160, 420, 40, 110, 640]

  

3. reduce函数

  reduce()方法接收一个函数作为累加器,reduce依次对数组中的每个元素执行一个回调函数。不处理数组中被删除或从未赋值的元素。

  语法:arr.reduce(回调,[初始值])

  参数

  案例1: 求一个数组的和

  reduce的用法

  设nums=[10,20,100,30,320,55,80,210,20,55,320]

  设new num 1=this . nums . reduce(function(total,num) {

  返回总数;

  }, 0)

  console.log(newNum1)

  

二. 综合案例1

  结合filter,map,reduce的函数得到数组中的100个元素,然后对这些元素约定*5,最后求出*5之后所有元素的和。

  reduce的用法

  设nums=[10,20,100,30,320,55,80,210,20,55,320]

  设new num 1=this . nums . filter(function(number){

  退货数量100

  }).地图(函数(数字){

  退货数量* 5

  }).reduce(function (total,num) {

  返回总数;

  }, 0)

  console.log(newNum1)

  产量:1220

  其实还有一个更简单的算法,lambda表达式。

  reduce的用法

  设nums=[10,20,320]

  设newNum11=

  nums.filter(num=num 100)。map(num=num * 5,this)。减少((总数,数量)=总数)

  console.log(newNum11)

  执行结果:150

  

三.综合案例2

  显示一个列表,选择那个要变色的,用vue实现。

  你可以想两分钟,看看怎么设计。

  在vue中,这个过程会非常简单。

  步骤1:定义一个isCurrentIndex来记录当前选中元素的下标。

  第二步:在class属性中设置:isCurrentIndex==index,表示选中元素的下标显示为红色,其他不显示为红色。

  步骤3:定义一个点击事件。每个单击事件都会修改选定的下标值。

  代码如下:

  !声明文档类型

  html lang=en

  头

  meta charset=UTF-8

  标题标题/标题

  风格。动作{

  颜色:红色;

  }

  /风格

  /头

  身体

  div id=应用程序

  保险商实验所

   li v-for=(item,index)in languages :class= { action:isCurrentIndex==index } @ click= changeCurrentIndex(index) { { index } }-{ { item } }/Li

  /ul

  /div

  脚本src=./js/vue.js/script

  脚本

  var app=新Vue({

  埃尔: #app ,

  数据:{

  语言:[Java , PHP , Python , Go , C语言],

  isCurrentIndex:0

  },

  方法:{

  changeCurrentIndex(索引){

  this.isCurrentIndex=index

  }

  }

  });

  /脚本

  /body

  /html

  

四. 综合案例3

  我们要做一个表格。具体情况如下

  主要有哪些东西呢?

  有n本书,有书名,出版日期,价格,数量,操作。

  价格应保留到小数点后两位,数量最多可增减到0。

  当表格中没有数据时,您可以删除表格并且不显示数据。

  随时计算总价。

  结合之前学过的js高阶函数,我们来看看这段代码是如何实现的。

  

第一步: 定义了n本书, 放在vue的data属性里面

  数据:{

  书籍:[

  {名称:《java设计模式》,出版日期:“1998年10月21日”,价格:58.00,计数:1},

  {名称:《围棋语言实战分析》,发布日期:《2018年5月12日》,价格:70.00,计数:1},

  {名称: vue很好解释,发布日期: 2019-08-09 ,价格:46.89,计数:1},

  {名称: jquery实战,发布日期: 2014-02-29 ,价格:39.98,计数:1}

  ],

  总计:0

  },

  定义总价以保存计算出的总价。

  

第二步: 画table

  div id=应用程序

  表格边框=1

  四羟乙基己二酰胺

  tr

  Td序列号/td

  Td标题/td

  Td出版日期/td

  Td价格/td

  Td采购数量/td

  Td操作/td

  /tr

  /thead

  tbody v-if=books.length==0

  tr

  Tdspan= 6 没有数据/td

  /tr

  /tbody

  tbody v-else

   tr v-for=(项目,索引)在书籍中

  td{{index 1}}/td

  td{{item.name}}/td

  td{{item.publishDate}}/td

  td{{item.price priceUnit}} /td

  任务描述

  button @ click= sub(index)-/button

  {{item.count}}

  button @click=添加(索引)/button

  /td

  任务描述

  按钮@click=del(index)删除/按钮

  /tr

  /tbody

  /表格

  Label= sum 总价:{ { { GetTotal() price unit } }/label

  /div

  在这里,我们遍历数据,然后处理价格,增加单位,增加或减少按钮的数量。最后,我们定义一个删除函数。

  

第三步. 使用过滤器格式化价格

  格式化价格时,使用管道符号。这是编写过滤器的方法。加滤镜前,价格58。加了滤镜后是$58.00,加了美元符号,价格保留两位小数。

  因为增加单位在不止一个地方被使用,我们把它定义为一个方法。它是这样写的

  过滤器:{

  价格单位(价格)

  返回 $ price.toFixed(2)

  }

  }

  在这里,过滤器的书写被定义。它类似于方法。其中定义了一种方法。实际上,这个方法可以放在方法中吗?是的,但是把它放在过滤器里有一个好处。可以用管道字符写。

  td{{item.price priceUnit}} /td

  有了过滤器,之前的值将作为参数自动传递给priceUnit。

  

第四步: 定义methods, 对图书数量进行增减, 且做少不能少于0

  子(索引){

  if (this.books[index].count=0) {

  this . books[索引]。coun=0;

  }否则{

  this . books[索引]。count-;

  }

  },

  添加(索引){

  this . books[索引]。数数;

  },

  这个我就不多说了,就写普通函数吧。

  

第五步: 计算总额

  总量的计算方法有很多种,比如常规写法。

  getTotal() {

  设total price=0;

  for(设I=0;我this . books . length;i ) {

  totalPrice=this.books[i]。price * this.books[i]。数数;

  }

  返回总价;

  },

  循环遍历图书,价格和数量的乘积之和。

  推荐js的高阶函数

  getTotal() {

  //使用数组的高阶函数计算每本书的价格总和

  返回this . books . map((book)=book . price * book . count)。减少((总数,数量)=总数)

  },

  回首往事。

  Map是对数组的每个元素执行操作。

  Reduce是数组中所有元素的总和。

  

第六步: 删除表格行

  del(索引){

  this.books.splice(索引,1)

  }

  删除行,用splice删除指定数据中的元素,就这样。

  关于vue常见高阶函数和综合案例的这篇文章到此为止。关于vue常见高阶函数及例子的更多信息,请搜索我们之前的文章或继续浏览以下相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: