眾所周知,微信小程序里所有對數據的修改只有在setData里修改才會在頁面上渲染。在此分享小程序里復雜數組的更新、刪除、添加、拼接
初始數據
數組嵌套對象
data: { cartList: [{ id: 1, goods: {id: 1, name: 'wechat'}, checked: true }, { id: 2, goods: {}, checked: false }, { id: 3, goods: {}, checked: true }] },
索引部分刪除
1 let index = 2; 2 let cartList = this.data.cartList 3 cartList.splice(index, 1) 4 this.setData({ 5 cartList: cartList 6 })
內部部分修改
只修改數據內某項里的某屬性。但此方法對於有引用到被修改的數據的wxs不會刷新頁面顯示,尚未清楚是bug還是小程序本身就不支持。
let index = 2 let updateTodo = `cartList[${index}].checked` this.setData({ [updateTodo]: true })
用一個變量接收要修改的數組,修改好后再整體setData賦值,如果原數據很大的話可能會影響性能。
1 let index = 2 2 let cartList = this.data.cartList; 3 cartList[index].checked = res.data.checked 4 this.setData({ 5 cartList: cartList 6 })
添加、拼接
push和concat
1 // push改變原數組 2 let newList= [{ id: 4, goods: {}, checked: true }, { id: 5, goods: {}, checked: false }}] 3 let cartList = this.data.cartList; 4 cartList.push(...newList); 5 this.setData({ 6 cartList: cartList 7 }) 8 9 // concat返回添加后的副本,並不會修改原有數組 10 let newList= [{ id: 4, goods: {}, checked: true }, { id: 5, goods: {}, checked: false }}] 11 let cartList = this.data.cartList; 12 this.setData({ 13 cartList: cartList.concat(newList) 14 })