收藏
回答

小程序用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值加进去,又不能通语法,其它的一些方式我也试过,没有成功,

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

回答关注问题邀请回答
收藏

6 个回答

  • 陈家宾
    陈家宾
    2019-02-19

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

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


    2019-02-19
    赞同 2
    回复
  • 然🌳
    然🌳
    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
    赞同 1
    回复
  • Desert Bubble
    Desert Bubble
    2019-12-06

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

    var data = {}

    data[key] = value // key 可以是任何字符串

    this.setData(data)


    方法二: ES6

    this.setData({

        [key]: value

    })


    2019-12-06
    赞同
    回复 1
    • 同周共济
      同周共济
      01-14
      这个key在wxml文件上怎么写呢
      01-14
      回复
  • 陈加尧
    陈加尧
    2017-06-09

    mark

    2017-06-09
    赞同
    回复
  • PhiliP Wu
    PhiliP Wu
    2017-01-15

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

        var test = this.data.test;

        test[i].name='liu'

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


    2017-01-15
    赞同
    回复
  • Zhu
    Zhu
    2017-01-14

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

    2017-01-14
    赞同
    回复
登录 后发表内容