vue 數組更新(push【可用】,$set,slice,filter,map【都屬於淺拷貝】)問題



this.$axios.post('https://....php',this.$qs.stringify({
                user: 'suess'
            }))
            .then(res => {
                this.dataa = res.data; //這里的dataa視圖不會更新,在其他函數里this.dataa沒有值
		})

在Vue中中括號記法賦后,不會觸發 updated,也就是視圖沒有更新。
用push, pop 等方法改變數組則可以,或者直接將指針指向一個新的數組,例如通過 slice,filter,map等方法返回的新數組,也會觸發視圖更新。
也可以通過Vue.$set()的辦法來改變數組的值。


$set

ps:現在有兩個數組,分別為arr1,arr2,如果arr1以下標賦值改變數組,arr2以$set改變數組,結果是什么樣呢?
data:{
arr1 = ['a','b','c'];
arr2 = [‘foo','bar','baz'];
}

vm.arr1[1] = 'alpha';
vm.$set(vm.arr2, 1, 'alpha');
根據開始我們說的根據下標索引改變數組不能觸發狀態更新,我們會知道:第一個數組的第二項改變不會在頁面更新,只有第二個數組的更改會在頁面更新。然而結果卻是:

arr1 = ['a', 'alpha', 'b', 'c'];
arr2 = [‘foo', 'alpha', 'bar','baz'];
兩個數組的值都更新了,也就是說,arr2用$set()方法更新時,頁面會全部更新一遍。

轉自https://www.jb51.net/article/136049.htm

filter()快速過濾創建一個新數組

var new_array = arr.filter(
callback(element[, index[, array]])[, thisArg]
)

var a = [1,2,3,4].filter(m => true)

a
(4) [1, 2, 3, 4]
var a = [1,2,3,4].filter(m => false)

a
[]
var a = [1,2,3,4].filter(m => m>2)

a
(2) [3, 4]

轉自https://blog.csdn.net/weixin_30680385/article/details/98122329

map()

(1) 返回一個經過處理后的新數組,但不改變原數組的值。

var a = [1,2,3,4,5]
var b = a.map((item) => {
return item = item * 2
})
console.log(a) // [1,2,3,4,5]
console.log(b) // [2,4,6,8,10]
轉自https://www.jb51.net/article/150865.htm


循環push

方法1:循環push

for(var i in that.xuanzArr_beixuan){
that.xuanzArr.push([]);
}
方法2:解析JSON
JSON.parse(JSON.stringify(this.templateData))
轉自https://www.cnblogs.com/shark1100913/p/12143534.html


slice()

slice是指定在一個數組中的元素創建一個新的數組,即原數組不會變

var color = new Array('red','blue','yellow','black');
var color2 = color.slice(1,2);
alert(color);   //輸出 red,blue,yellow,black
alert(color2); //輸出 blue;注意:這里只有第二項一個值
https://blog.csdn.net/hbwang_716/article/details/118684011


免責聲明!

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



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