11. VUE 數組操作


變異方法

Vue 包含一組觀察數組的變異方法,所以它們也將會觸發視圖更新。這些方法如下:

push() 添加元素

<ul id="example-1">
 <li v-for="item in items" :key="item.id">{{ item.message }} </li>
</ul>
<script type="text/javascript">
var example1 = new Vue({
  el: '#example-1',
  data: {
    items: [
      {message: 'Foo' },
      {message: 'Bar' }
    ]
  }
});
example1.$data.items.push({message :  'test'});
</script>

pop() 刪除最后一個元素

example1.$data.items.pop();

shift() 刪除第一個元素

example1.$data.items.shift();

unshift() 添加一個元素到數組最前面

example1.$data.items.unshift({message :'hi..'});

splice() 方法用於插入、刪除或替換數組的元素

參數 描述
index   必需。規定從何處添加/刪除元素。該參數是開始插入和(或)刪除的數組元素的下標,必須是數字。
howmany 必需。規定應該刪除多少元素。必須是數字,但可以是 "0"。如果未規定此參數,則刪除從 index 開始到原數組結尾的所有元素。
item1, ..., itemX 可選。要添加到數組的新元素
example1.$data.items.splice(0,1,{message:'splice'});

sort() 排序(升序)

<ul id="example-1">
 <li v-for="item in items" :key="item.id">{{ item }} </li>
</ul>
<script type="text/javascript">
var example1 = new Vue({
  el: '#example-1',
  data: {
    items: [
      2,3,4
    ]
  }
});
example1.$data.items.sort();

reverse() 排序(降序)

example1.$data.items.reverse();

重塑數組

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

example1.items = example1.items.filter(function (item) {

  return item.message.match(/Foo/)

})

你可能認為這將導致 Vue 丟棄現有 DOM 並重新渲染整個列表。幸運的是,事實並非如此。 Vue 實現了一些智能啟發式方法來最大化 DOM 元素重用,所以用一個含有相同元素的數組去替換原來的數組是非常高效的操作。

filter() 數組元素過濾

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

注意事項

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

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

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

為了解決第一類問題,以下兩種方式都可以實現和 vm.items[indexOfItem] = newValue 相同的效果, 同時也將觸發狀態更新:

// Vue.set

Vue.set(example1.items, indexOfItem, newValue)

例子:

<ul id="example-1">
 <li v-for="item in items" :key="item.id">{{ item.message }} </li>
</ul>
<script type="text/javascript">
var example1 = new Vue({
  el: '#example-1',
  data: {
    items: [
      {message: 'Foo' },
      {message: 'Bar' },
      {message: 'hcoder'}
    ]
  }
});
//example1.items[3] = {message : 'test...'};
Vue.set(example1.items, 3, {message : 'test...'});
</script>

 

轉載:https://blog.csdn.net/qq_36838191/article/details/80849591


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM