亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Vue數組更新及過濾排序功能

2019-11-19 15:50:41
字體:
來源:轉載
供稿:網友

前面的話

  Vue為了增加列表渲染的功能,增加了一組觀察數組的方法,而且可以顯示一個數組的過濾或排序的副本。本文將詳細介紹Vue數組更新及過濾排序

變異方法

  Vue 包含一組觀察數組的變異方法,它們將會觸發視圖更新,包含以下方法

push() 接收任意數量的參數,把它們逐個添加到數組末尾,并返回修改后數組的長度

pop() 從數組末尾移除最后一項,減少數組的length值,然后返回移除的項

shift() 移除數組中的第一個項并返回該項,同時數組的長度減1

unshift() 在數組前端添加任意個項并返回新數組長度

splice() 刪除原數組的一部分成員,并可以在被刪除的位置添加入新的數組成員

sort() 調用每個數組項的toString()方法,然后比較得到的字符串排序,返回經過排序之后的數組

reverse() 用于反轉數組的順序,返回經過排序之后的數組

<div id="example"> <div> <button @click='push'>push</button> <button @click='pop'>pop</button> <button @click='shift'>shift</button> <button @click='unshift'>unshift</button> <button @click='splice'>splice</button> <button @click='sort'>sort</button> <button @click='reverse'>reverse</button> </div> <ul> <li v-for="item in items" >  {{ item.message }} </li> </ul> </div><script>var example = new Vue({ el: '#example', data: { items: [  {message: 'Foo' },  {message: 'Bar' },  {message: 'Baz' } ], addValue:{message:'match'} }, methods:{ push(){  this.items.push(this.addValue) }, pop(){  this.items.pop() }, shift(){  this.items.shift() }, unshift(){  this.items.unshift(this.addValue) }, splice(){  this.items.splice(0,1) }, sort(){  this.items.sort() }, reverse(){  this.items.reverse() }, }})</script>

非變異方法

  變異方法(mutation method),顧名思義,會改變被這些方法調用的原始數組。相比之下,也有非變異(non-mutating method)方法,例如: filter(), concat(), slice() 。這些不會改變原始數組,但總是返回一個新數組。當使用非變異方法時,可以用新數組替換舊數組

concat() 先創建當前數組一個副本,然后將接收到的參數添加到這個副本的末尾,最后返回新構建的數組

slice() 基于當前數組中一個或多個項創建一個新數組,接受一個或兩個參數,即要返回項的起始和結束位置,最后返回新數組

map() 對數組的每一項運行給定函數,返回每次函數調用的結果組成的數組

filter() 對數組中的每一項運行給定函數,該函數會返回true的項組成的數組

<div id="example"> <div> <button @click='concat'>concat</button> <button @click='slice'>slice</button> <button @click='map'>map</button> <button @click='filter'>filter</button> </div> <ul> <li v-for="item in items" >  {{ item }} </li> </ul> </div>
<script>var example = new Vue({ el: '#example', data: { items: ['Foo','Bar','Baz'], addValue:'match' }, methods:{ concat(){  this.items = this.items.concat(this.addValue) }, slice(){  this.items = this.items.slice(1) }, map(){  this.items = this.items.map(function(item,index,arr){  return index + item;   }) }, filter(){  this.items = this.items.filter(function(item,index,arr){  return (index > 0);   }) } }})</script>

  以上操作并不會導致Vue丟棄現有DOM并重新渲染整個列表。Vue實現了一些智能啟發式方法來最大化DOM元素重用,所以用一個含有相同元素的數組去替換原來的數組是非常高效的操作

無法檢測

  由于JS的限制, Vue 不能檢測以下變動的數組:

  1、利用索引直接設置一個項時,例如: vm.items[indexOfItem] = newValue

  2、修改數組的長度時,例如: vm.items.length = newLength

<div id="example"> <div> <button @click='setVal'>setVal</button> <button @click='setLength'>setLength</button> <button @click='pop'>pop</button> </div> <ul> <li v-for="item in items" >{{ item }}</li> </ul>  <p>{{ message }}</p> </div>
<script>var watchFunc = function(){ example.message = '數據發生變化'; setTimeout(function(){ example.message = ''; },500); }var example = new Vue({ el: '#example', data: { items: ['Foo','Bar','Baz'], message:'', }, watch:{ items:watchFunc }, methods:{ pop(){  this.items.pop() }, setVal(){  this.items[0]= 'match'; }, setLength(){  this.items.length = 2; } }})</script>

  以上代碼中,直接設置值和長度使用watch不能檢測到變化

  以下兩種方式都可以實現和vm.items[indexOfItem]=newValue相同的效果, 同時也將觸發狀態更新

// Vue.setVue.set(example1.items, indexOfItem, newValue)// Array.prototype.spliceexample1.items.splice(indexOfItem, 1, newValue)

   為了解決第二類問題,可以使用 splice

example1.items.splice(newLength)
<div id="example"> <div> <button @click='setVal1'>setVal1</button> <button @click='setVal2'>setVal2</button> <button @click='setLength'>setLength</button> </div> <ul> <li v-for="item in items" >{{ item }}</li> </ul>  <p>{{ message }}</p> </div>
<script>var watchFunc = function(){ example.message = '數據發生變化'; setTimeout(function(){ example.message = ''; },500); }var example = new Vue({ el: '#example', data: { items: ['Foo','Bar','Baz'], message:'', }, watch:{ items:watchFunc }, methods:{ setVal1(){  Vue.set(this.items, 0, 'match') }, setVal2(){  this.items.splice(1, 1, 'xiaohuochai') },  setLength(){  this.items.splice(2) } }})</script>

過濾排序

  有時,要顯示一個數組的過濾或排序副本,而不實際改變或重置原始數據。在這種情況下,可以創建返回過濾或排序數組的計算屬性

【computed】

<div id="example"> <ul> <li v-for="n in evenNumbers">{{ n }}</li> </ul> </div>
<script>var example = new Vue({ el: '#example', data: { numbers: [ 1, 2, 3, 4, 5 ], }, computed: { evenNumbers: function () {  return this.numbers.filter(function (number) {  return number % 2 === 0  }) } }})</script>

【methods】

  在計算屬性不適用的情況下 (例如,在嵌套 v-for 循環中) 可以使用一個 method 方法

<div id="example"> <ul> <li v-for="n in even(numbers)">{{ n }}</li> </ul> </div>
<script>var example = new Vue({ el: '#example', data: { numbers: [ 1, 2, 3, 4, 5 ], }, methods: { even: function (numbers) {  return numbers.filter(function (number) {  return number % 2 === 0  }) } }})</script>

總結

以上所述是小編給大家介紹的Vue數組更新及過濾排序功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
2019最新中文字幕| 57pao成人永久免费视频| 日韩中文字幕在线精品| 欧美与欧洲交xxxx免费观看| 欧美精品一区三区| 国产香蕉一区二区三区在线视频| 久久精品国产成人精品| 日韩美女在线观看| 亚洲欧美在线x视频| 自拍偷拍亚洲精品| 91亚洲精品在线观看| 一区二区欧美久久| 揄拍成人国产精品视频| 久久成年人免费电影| 丝袜亚洲欧美日韩综合| 91精品视频专区| 欧美视频中文在线看| 尤物tv国产一区| 中文字幕亚洲色图| 国产精品扒开腿做爽爽爽的视频| 精品国产成人av| 亚洲一区二区三区四区视频| 日韩精品亚洲元码| 亚洲精品美女在线观看播放| 久久中文字幕在线| 91在线免费看网站| 国产成人小视频在线观看| 亚洲国产99精品国自产| 亚洲性xxxx| 国产日韩精品电影| 51视频国产精品一区二区| 亚洲欧美日韩天堂| 国产精品久久色| 成人黄色av免费在线观看| 色婷婷亚洲mv天堂mv在影片| 日本精品视频在线| 亚洲国产成人精品久久| 成人免费高清完整版在线观看| 国产精品一区二区三区在线播放| 日韩免费在线看| 亚洲直播在线一区| 欧美成人免费在线视频| 亚洲国产成人久久综合一区| 久久综合伊人77777尤物| 久久精品99国产精品酒店日本| 91美女片黄在线观| 欧美日韩国产精品一区| 亚洲国产精品福利| 国产亚洲欧美aaaa| 亚洲大胆人体av| 欧美视频专区一二在线观看| 中文字幕日韩av| 国产精品视频资源| 午夜精品三级视频福利| 国产精品久久久久久久久久免费| 国产精品第七十二页| 中文日韩在线视频| 国产午夜精品一区理论片飘花| 国模吧一区二区三区| 91影视免费在线观看| 国产精品欧美风情| 亚洲视频axxx| 68精品久久久久久欧美| 热99精品只有里视频精品| 98精品国产高清在线xxxx天堂| 国产成人精品免高潮费视频| 黑人巨大精品欧美一区二区三区| 色先锋资源久久综合5566| 欧美性极品少妇精品网站| 中文字幕精品—区二区| 久热精品视频在线观看一区| 91青草视频久久| 国产视频在线观看一区二区| 亚洲最新在线视频| 亚洲精品国偷自产在线99热| 日韩电影在线观看中文字幕| 国产精品白丝av嫩草影院| 国产精品精品视频一区二区三区| 欧美激情精品久久久久久免费印度| 欧美激情中文字幕在线| 国产日韩欧美在线视频观看| 高清欧美电影在线| 欧美激情二区三区| 奇米一区二区三区四区久久| 中文字幕日韩欧美精品在线观看| 国产午夜精品一区理论片飘花| 欧美日韩国产中文精品字幕自在自线| 国产成人高清激情视频在线观看| 精品福利樱桃av导航| 性欧美亚洲xxxx乳在线观看| 日韩高清欧美高清| 日韩av免费在线播放| 日产精品99久久久久久| 亚洲人成在线电影| 日韩精品在线电影| 国产97人人超碰caoprom| 国内精品国产三级国产在线专| 久久久久久久久久久久久久久久久久av| 秋霞av国产精品一区| 日韩电影免费在线观看中文字幕| 久久久91精品国产| 亚洲欧洲偷拍精品| 亚洲色图15p| 69av视频在线播放| 国产精品免费看久久久香蕉| 69视频在线播放| 亚洲丝袜av一区| 日韩高清a**址| 欧美日韩中文在线观看| 欧美日韩国产精品一区二区三区四区| 91精品视频网站| 国产精品久久久久久久久久99| 在线激情影院一区| 亚洲亚裔videos黑人hd| 成人午夜两性视频| 久久精品国产亚洲精品| 欧美国产日韩一区二区在线观看| 色中色综合影院手机版在线观看| 成人97在线观看视频| 国产成人一区二区三区小说| 2019中文在线观看| 亚洲视频在线免费看| 国产成人精品免费视频| 亚洲精品中文字幕av| 在线看福利67194| 久久久91精品| 欧美一区二区三区……| 亚洲激情成人网| 亚洲一区二区久久久久久久| 国产免费一区二区三区在线能观看| 欧美黄网免费在线观看| 欧美成aaa人片免费看| 亚洲无av在线中文字幕| 久久久噜噜噜久噜久久| 欧美久久久精品| 久久伊人91精品综合网站| 欧美性生活大片免费观看网址| 91精品综合视频| 91国内免费在线视频| 成人亚洲综合色就1024| 久久人体大胆视频| 欧美性猛交丰臀xxxxx网站| 亚洲3p在线观看| 亚洲欧洲av一区二区| 国产精品www色诱视频| 136fldh精品导航福利| 欧美日韩中国免费专区在线看| 一区二区三区视频免费在线观看| 久久久久久噜噜噜久久久精品| 成人欧美在线观看| 一区二区三区视频免费在线观看| 亚洲爱爱爱爱爱| 久久久午夜视频| 亚洲欧美在线x视频| 亚洲国产欧美一区二区丝袜黑人| 亚洲人成网站色ww在线| 久久精品国产一区| 久久av中文字幕| 久久综合伊人77777| 国产精品18久久久久久麻辣| 精品呦交小u女在线| 91精品视频一区| 国产精品久久久久久影视| 日本不卡视频在线播放|