微信小程序setData复杂数组的更新、删除、添加、拼接

众所周知,微信小程序里所有对数据的修改只有在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         })

原文地址:https://www.cnblogs.com/viete/p/12000339.html

时间: 2024-10-19 08:26:17

微信小程序setData复杂数组的更新、删除、添加、拼接的相关文章

微信小程序setData的使用,通过[...]进行动态key赋值

首先先介绍一下微信小程序Page.prototype.setData(Object data, Function callback)的讲解: setData函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的this.data的值(同步) 微信小程序官网文档只对字符串,数字,数组和对象类型的数据通过对setData进行了修改,却没有对动态数据进行讲解,在这里我就针对静态数据以及动态数据的修改进行讲解. 这里关键是动态数据修改,通过使用[...]: "..."进行动态数据赋值,如下

微信小程序常见问题集合(长期更新)

程序问题: 森哥解答:1.找不到所要替换的文件  问题原因:开发工具版本不正确,老版本不支持 解决方案:确保下载的程序版本在0.9.092100以上  2.Failed to load resource: net::ERR_NAME_NOT_RESOLVEDhttp://1709827360.appservice.open.weixin.qq.com/appservice  问题原因:通常是由于系统设置了代理如Shadowsocks等. 解决方案:关闭代理,或者依次点击工具栏"动作"-

微信小程序实现给循环列表点击添加类(单项和多项)

在微信小程序里面没有DOM对象, 不能操作DOM. 所有的操作通过数据来实现,下面主要实现了给循环列表点击添加类的操作 一.单项 目标需求:实现下图,给点击的view增加类,每次只能选择一个. 主要思路:给点击的view增加类,依靠点击的index对state进行赋值.如果相同时,给该view增加类. 实现代码: .wxml文件 1 <view> 2 <view class='appointent-date'> 3 <view class="appointent-d

微信小程序开发技巧总结(持续更新...)

小程序开发技巧总结 结合自己在平时的开发中遇到的各种问题,和浏览各种问题的解决方案总结出一些自己在日常开发中常用的技巧和知点,希望各位不吝斧正. 数据的生命周期 1.短生命周期数据存储 以小程序启动到彻底关闭为周期的的数据建议存储在app.js文件夹中,引用app.js: const app =getApp(); 假设Value是在小程序本次生命周期中经常使用到的一个数据,比如说请求API的Token,动态的令牌等.那么就可以把这个值赋值到全局变量中去.实际上,并不是只有app.js中的glob

微信小程序 setData动态设置数组中的数据

setdata传递动态数据值必须为对象(只能是key:value) 语法如下 this.setData({ filter: 1212 }) 如果setdata要传递数组呢? 首先相到的是 this.setData({ filter.a: 12 filter.b: 32 }) 这样回报语法错误 既然语法规定不能在里面写数组,那就把数组定义到外面 filter.selectArea1 = 1, filter.selectArea2 = 2, filter.selectArea3 = 3, this.

微信小程序 setData 数组 渲染问题 删除之后的数组渲染不正确

list: [ { id: 0, mode: 1, src: 'https://s2.yzlcq.cn/images/10070.png', text: '0' }, { id: 1, mode: 1, src: 'https://s2.yzlcq.cn/images/10070.png', text: '1' }, { id: 2, mode: 1, src: 'https://s2.yzlcq.cn/images/10070.png', text: '2' } ], onDelete(e)

微信小程序-setData()方法

一般setData方法多用于点击后改变页面信息或者刷新后与后台交互获取最新的信息 注意: 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据. 方法如下: js: Page({ data: { text: 'init data', num: 0, array: [{text: 'init data'}], object: { text: 'init data' } }, c

微信小程序 功能函数 将对象的键添加到数组 (函数深入)

// 将对象的键添加到数组 var arr = Object.keys(site); //英文 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys 中文 https://developer.mozilla.org/zh-CN/ https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Glo

微信小程序---setData

data:{ obj:{ name:'hello' } } 对data中obj的name字段进行重新赋值. onLoad: function (option) { var value = 'obj.name'; this.setData({ [value]:'world' }) console.log('obj',this.data.obj.name) } 原文地址:https://www.cnblogs.com/Super-scarlett/p/10042443.html