收藏
回答

如何修改一个数组中的某一个


data: {

    items: [

        { name: 'nan', value: '男', checked: false},

        { name: 'nv', value: '女', checked: false},

    ]

}


这样一个数组,如何修改某一个checked的值

var that = this

var checked = "items[" + 1 + "].checked"

that.setData({ checked: true })


console.log(that.data.items)      //这种做法发现打印出来的数据没有变化



最后一次编辑于  2018-11-21  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

6 个回答

  • 鸩
    2018-11-23

    https://developers.weixin.qq.com/community/develop/doc/000c68601d0b402a45672ee5b5b000

    2018-11-23
    赞同
    回复
  • 范诗豪
    范诗豪
    2018-11-22

    include了解下


    2018-11-22
    赞同
    回复
  • 落云
    落云
    2018-11-22

    let arr= this.data.items;

    arr[1].checked = true

    this.setData({

        items: arr

    });

    console.log(this.data.items);

    就ok了


    2018-11-22
    赞同
    回复
  • 人互人😊🔣📉😯🎁测试
    人互人😊🔣📉😯🎁测试
    2018-11-21

    es6 语法中对象属性可以使用表达式

    let items = this.data.items;

    this.setData({

    ['items[' + 1 + '].checked']: true

    })

    console.log(that.data.items) //这种做法发现打印出来的数据没有变化


    2018-11-21
    赞同
    回复 3
    • 人互人😊🔣📉😯🎁测试
      人互人😊🔣📉😯🎁测试
      2018-11-21

      http://es6.ruanyifeng.com/#docs/object

      2018-11-21
      回复
    • 人互人😊🔣📉😯🎁测试
      人互人😊🔣📉😯🎁测试
      2018-11-21回复人互人😊🔣📉😯🎁测试

      还有一种方式:

      let itemsObj = {};

      const index = 1;

      itemsObj['items[' + index + '].checked'] = true;

      this.setData(itemsObj);

      console.log(this.data.items);


      2018-11-21
      回复
    • Dave
      Dave
      2018-11-21回复人互人😊🔣📉😯🎁测试

      嗯嗯,谢谢,这种方式我还没试过,我找到了我的错误之处,就是setData的时候checked,少写了一个[]包起来

      2018-11-21
      回复
  • 小惦儿
    小惦儿
    2018-11-21

    that.setData({[checked:true]});

    这样就可以了

    2018-11-21
    赞同
    回复 4
    • @🐲较瘦
      @🐲较瘦
      2018-11-21

      数组里这样写不报错?

      2018-11-21
      回复
    • 小惦儿
      小惦儿
      2018-11-21回复@🐲较瘦

       

       that.setData({[checked]:true});

      写错了。。。


      2018-11-21
      1
      回复
    • Dave
      Dave
      2018-11-21回复@🐲较瘦

      数组里面给某一个元素重新赋值,讲道理,是这样写的,因为我之前那个项目是这样做的,这下子莫名其妙不行了,不知道哪里写错了

      2018-11-21
      回复
    • @🐲较瘦
      @🐲较瘦
      2018-11-21回复Dave

      that.setData({[checked]:true});

      这样写是对的。

      学到了

      2018-11-21
      回复
  • @🐲较瘦
    @🐲较瘦
    2018-11-21

    说不定你打印checked 还能打印出个 true

    2018-11-21
    赞同
    回复 4
    • Dave
      Dave
      2018-11-21

      打印checked就是一个字符串:items[1].checked

      2018-11-21
      回复
    • @🐲较瘦
      @🐲较瘦
      2018-11-21回复Dave

      你这个本身就有问题的。

      var checked = "items[" + 1 + "].checked"  你这里给checked 赋值是"items[" + 1 + "].checked"这样的一个字符串。

      然后你打印的是不是直接console.log(checked)? 你这样打印肯定是出来的是这个字符串

      你应该打印console.log(that.data.checked)。你这样打印出来的就是你刚刚setData的结果了。应该是 ture


      2018-11-21
      回复
    • 方琦
      方琦
      2018-11-23回复@🐲较瘦

      为什么一定要用 this.setData 呢?  直接用 this.data.items[1].checked = true 不行呢?  是没有响式么?

      2018-11-23
      回复
    • @🐲较瘦
      @🐲较瘦
      2018-11-23回复方琦

      那你如果不用setData就能把data里的值修改了,也行啊。你可以试一试呗

      2018-11-23
      1
      回复