收藏
回答

this.setData 怎么给对象动态赋值

问题模块
API和组件

data:{

    array: [{text: 'init data'}]

}, 


this.setData({ 

'array[0].text':'changed data'

})

如果里面的 0 变成index变量  需要怎么解决 

或者能提供别的解决方法?

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

11 个回答

  • jican
    jican
    2017-01-04

    通过 ES6 的 模板字符串 和 属性名表达式,注意在项目配置里面开启ES6 转 ES5。


    let index = 0


    this.setData({

      [`array[${index}].text`] : 'changed data'

    })


    2017-01-04
    赞同 99
    回复 1
    • BostonTerrier
      BostonTerrier
      02-22

      太强

      02-22
      赞同
      回复
  • 让爱慢慢成册²⁰¹⁹
    让爱慢慢成册²⁰¹⁹
    2017-01-04

    this.data.array[0].text = "changed data"

    2017-01-04
    赞同
    回复
  • All is well
    All is well
    2017-01-04

    1楼的做法只是赋值啊  没法更新到视图上啊, 难道要从新全部赋值一次?

    2017-01-04
    赞同
    回复
  • All is well
    All is well
    2017-01-04

    @暨灿 非常谢谢

    2017-01-04
    赞同
    回复
  • 高帅
    高帅
    2017-07-06

    4楼正解,模板字符串+属性名表达式,好用。

    2017-07-06
    赞同
    回复
  • yunran
    yunran
    2017-10-09

    4楼简直太强了

    2017-10-09
    赞同
    回复
  • 空灵沐雨
    空灵沐雨
    2018-10-23

    _this.setData({ [`[${_this.data.zhiduarr[_id].zhiduStatus}]`]: 'weixiazai' })

    这样之后提示:Path can not start with []:

    2018-10-23
    赞同
    回复 1
    • 空灵沐雨
      空灵沐雨
      2018-10-23

      已经弄明白了,有个概念搞混了,在that.setData({arr1:arr2})的时候,被赋值的变量arr1是不需要that.data.arr1这样表述的

      2018-10-23
      赞同
      回复
  • 梦醒时分
    梦醒时分
    05-29

    我的还是不行。。。求大佬帮助

    1.这是我的数据结构


    2.赋值语句


    3.打印结果


    05-29
    赞同
    回复 1
    • 梦醒时分
      梦醒时分
      05-29

      我已经解决了,下面是解决方法:


      1.先弄成一个字符串2.注意加[ ],不然无法赋值

      05-29
      赞同 11
      回复