上一章讲述了计算属性的基本使用,这里说一下复杂使用
怎么使用计算属性computed:计算出所有books的总价格Price。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>计算属性的复杂使用</title> </head> <body> <div id="app"> <h2>总价格:{{totalPrice}}</h2> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script> <script> const app = new Vue({ el: "#app", data: { books: [ { id: 110, name: "JavaScript从入门到入土", price: 119 }, { id: 111, name: "Java从入门到放弃", price: 80 }, { id: 112, name: "编码艺术", price: 99 }, { id: 113, name: "代码大全", price: 150 }, ] }, }) </script> </body> </html>
首先写入
computed: { totalPrice:function() { //写出七种方法 } }
一共有七种求和方法:
第一种:利用for循环遍历
totalPrice:function() { let total = 0; for(let i = 0; i<this.books.length;i++){ total += this.books[i].price; } return total; }
第二种:forEach
totalPrice: function () { let total = 0; this.books.forEach((item) => { total += item.price }) return total; }
第三种:for in
totalPrice: function () { let total = 0; for (let i in this.books){ total += this.books[i].price } return total; }
第四种:for of
totalPrice: function () { let total = 0; for(let value of this.books){ total += value.price } return total }
第五种:map
totalPrice: function () { this.books.map((item)=>{ total += item.price }) return total; }
第六种:filter
totalPrice: function () { let total = 0; this.books.filter((item)=>{ console.log(item); total += item.price }) return total; }
第七种:reduce
totalPrice: function () { return this.books.reduce((currentTotal,item)=>{ console.log(item); return currentTotal + item.price },0) }
简写:
totalPrice: function () { return this.books.reduce((currentTotal,item)=>+item.price) }
下面是完整代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>计算属性的复杂使用</title> </head> <body> <div id="app"> <h2>总价格:{{totalPrice}}</h2> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script> <script> const app = new Vue({ el: "#app", data: { books: [ { id: 110, name: "JavaScript从入门到入土", price: 119 }, { id: 111, name: "Java从入门到放弃", price: 80 }, { id: 112, name: "编码艺术", price: 99 }, { id: 113, name: "代码大全", price: 150 }, ] }, computed: { //1、 for循环第一种方法 totalPrice:function() { let total = 0; for(let i = 0; i<this.books.length;i++){ total += this.books[i].price; } return total; } //2、 forEach /* totalPrice: function () { let total = 0; this.books.forEach((item) => { total += item.price }) return total; } */ //3、 for in /* totalPrice: function () { let total = 0; for (let i in this.books){ total += this.books[i].price } return total; } */ //4、 for of /* totalPrice: function () { let total = 0; for(let value of this.books){ total += value.price } return total } */ //5、 map /* totalPrice: function () { this.books.map((item)=>{ total += item.price }) return total; } */ //6、 filter /* totalPrice: function () { let total = 0; this.books.filter((item)=>{ console.log(item); total += item.price }) return total; } */ //7、 reduce /* totalPrice: function () { return this.books.reduce((currentTotal,item)=>{ console.log(item); return currentTotal + item.price },0) } */ /* totalPrice: function () { return this.books.reduce((currentTotal,item)=>+item.price) } */ } }) </script> </body> </html>
输出的price总和应为:448