收藏
回答

小程序用setData()方法时,key中包含变量怎么处理?

问题模块
API和组件

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

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

最后一次编辑于  2017-01-14  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

5 个回答

  • 然🌳
    然🌳
    2017-01-21

    谢谢这位的回答,

    我在网上找到了别外一个解决的办法: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);

    即提前把对象准备好。


    2017-01-21
    赞同 11
    回复
  • 陈家宾จุ๊บ
    陈家宾จุ๊บ
    02-19

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

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


    02-19
    赞同 11
    回复
  • Zhu
    Zhu
    2017-01-14

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

    2017-01-14
    赞同
    回复
  • PhiliP Wu
    PhiliP Wu
    2017-01-15

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

        var test = this.data.test;

        test[i].name='liu'

        this.setData({'test':test})


    2017-01-15
    赞同
    回复
  • 陈加尧
    陈加尧
    2017-06-09

    mark

    2017-06-09
    赞同
    回复