小程序用setData()方法时,key中包含变量怎么处理?
发布于 7 年前 作者 jun28 16165 次浏览 来自 问答

我要变更一个数据的值,但用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值加进去,又不能通语法,其它的一些方式我也试过,没有成功,

谁有解决这个问题 的办法?

6 回复

这里可以使用 ES6 语法,动态修改对象的 key:

setData({
  [`test[{${i}].name`]: 'liu'
});

楼上说的对,你这能这样做:

    var test = this.data.test;

    test[i].name=‘liu’

    this.setData({‘test’:test})

目前这种情况,只能设置整个test值

方法一: 用一个空对象暂存

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);

即提前把对象准备好。

回到顶部