微信小程序奇葩的setData,不知道怎么删除数组元素

szuzsq 2018-04-13 11:23:53
官方文档



//像这些代码能理解
this.setData({
'array[0].text': 'changed data',
});

//网上说,如果序号是动态的(i、j、k之类的),就是这些代码,虽然不理解,但能工作就ok了。
this.setData({
['array[' + i + '].text']: 'changed data',
});

//但是删除数组元素怎么搞?

//1、*******************我是这么干的,原始数组删除元素之后,再整体set回去:
this.data.array.splice(i, 2);
this.setData({
'array': this.data.array,
});

//总感觉不靠谱啊。第一:鬼知道什么时候超出1024kB啊。
//第二:原始数组set回去,会不会出错。我测试了,似能行,但总觉得会有隐患似的。
//就感觉讨了个二手夫人一样,总怀疑她的子宫到底吸收了多少第一个男人的DNA。唉。

//2、*******************如果是复制一份副本出来,删除元素之后,再整体set回去。
//增加代码量,而且还是没有避免1024kB的梗。

//3、*******************如果是set某个元素为null,好奇葩不说,不知道有没有隐患。
this.setData({
‘array[2]’: null,
});

//4、*******************为了1024kB的梗,我想到的是:先清空,再一个个set上去。
//但是这个方法,界面上会闪一下。哎。
this.setData({
array: [],
});

for(var i in tmp) {
this.setData({
['array[' + i + ']']: tmp[i],
});
}
...全文
4665 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NightStar_yong 2019-10-31
  • 打赏
  • 举报
回复
其实想到了一个思路。 在setData的时候将需要删除的数据 赋值 为 “”;例如 this.setData({ ['array[' + i + '].text']: '', }); 在setData过后将 this.data.array 遍历一次,将值为 “” 的值删除掉。 然后在wxml模板里面用wx:if将值 为 “” 的数据不渲染。
szuzsq 2018-04-17
  • 打赏
  • 举报
回复
引用 4 楼 u014654607 的回复:
array.splice()想怎么插就怎么插,想怎么删就怎么删
不像vue,小程序不能直接操作data啊,必须通过setData
  • 打赏
  • 举报
回复
array.splice()想怎么插就怎么插,想怎么删就怎么删
szuzsq 2018-04-13
  • 打赏
  • 举报
回复
引用 2 楼 cv521zw 的回复:
this.setData({ list: this.data.list}) 删除完再调用一次setData
这个我用过,我也说过:第一,1024kB的梗。第二,不知道小程序setData的原理是怎么样的,用自己set自己会不会有问题....
cv521zw 2018-04-13
  • 打赏
  • 举报
回复
this.setData({ list: this.data.list}) 删除完再调用一次setData
cv521zw 2018-04-13
  • 打赏
  • 举报
回复
this.data.list.splice(1,1) 从index为id的位置开始,删除i个元素

3,143

社区成员

发帖
与我相关
我的任务
社区描述
微信开发即微信公众平台开发,将企业信息、服务、活动等内容通过微信网页的方式进行表现,通过二次开发可以将公众账号由一个媒体型营销工具转化成提供服务的产品。
社区管理员
  • 微信开发
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧