我要变更一个数据的值,但用setData({key:value})方法时,key不能正确使用,因为key中包含变量:
如如这样一个数据test:
Page({
data:{
test[
{'name':'zhang'},
{'name':'wang'},
{'name':'zhao'},
]
}
})
当我想更改test[i].name的值时,因为我这个i是通过计算得到的,所以i是一个变量
用setData({'test[i].name':'liu'})时,运行提示我tese[]中[]里的下标只能用数字,如果我用字串拼接把i值加进去,又不能通语法,其它的一些方式我也试过,没有成功,
谁有解决这个问题 的办法?
这里可以使用 ES6 语法,动态修改对象的 key:
setData({
[`test[{${i}].name`]:
'liu'
});
方法一: 用一个空对象暂存
var data = {}
data[key] = value // key 可以是任何字符串
this.setData(data)
方法二: ES6
this.setData({
[key]: value
})
谢谢这位的回答,
我在网上找到了别外一个解决的办法:http://blog.csdn.net/hicoldcat/article/details/53967334
最近在使用微信小程序的setData时,遇到了以下问题。如下:
官网文档在使用setData()设置数组对象的某个元素的属性时,是这么使用的:
Page({ data: { array: [{text: 'init data'}], }, changeItemInArray: function() { this.setData({ 'array[0].text':'changed data' }) } })
使用了 ‘array[0].text’ : ‘changed data’ 这样的值。但在实际使用中,我们对数组的中的某个元素的设置是动态的。即 我们通常应该是 ‘array[‘+index+’].text’ : ‘changed data’ ,其中index应该是一个动态的数字。但显然,这样是无法使用在对象的key中的。
所以,我只能使用了一个变通的方法。如下:
var param = {};var string = "array["+index+"].text; param[string] = 'changed data'; that.setData(param);
即提前把对象准备好。
mark
楼上说的对,你这能这样做:
var test = this.data.test;
test[i].name='liu'
this.setData({'test':test})
目前这种情况,只能设置整个test值