如图。
如果我在代码中写
Page({ data: { text: 'init data', array: [{text: 'init data'}], object: { text: 'init data' } }}) |
如果调用
this.setData({ 'array[0].text':'changed data'}) |
按照文档所说,此时, this.data.array[0].text 应该会变成 changed data 。
如果我调用
this.setData({ 'arr[0].text':'changed data',}) |
按照文档所说,此时, this.data.arr[0].text 应该会变成 changed data 。
那如果,我需要 this.data['arr[0].text '] 赋值,应该如何处理?
又或者,这样调用
this.setData({ 'array[0].text':'changed data', 'text':'changed text'}) |
这时候,又应该如何进行呢?
选项一:this.data.text === ‘changed text’, this.data.array[0].text === ‘changed data’
选项二:this.data.text === ‘changed text‘, this.data['array[0].text'] === ‘changed data’
(通过实际代码运行结果,是选项一为答案)
参考 lodash 的做法,是 _.set(obj, path, value) ,确定了一定是切割 path 进行数据创建的,但是只局限于一次进行一个 path 的设置。
疑惑就是这个,希望能解答。
最好就是能把内部实现的 setData 代码贴出来,方便查阅。

obj: {text:'init data'}你这个又怎么赋值呢??
写了个测试代码。
Page({data: {text:'init data',array: [{falg:false, text:'init data'}],obj: {text:'init data'}},setData1 () {this.setData({'array[0].text':'changed data 1',})console.log(this.data);},setData2 () {this.setData({'arr[0].text':'changed data 2',})console.log(this.data);},setData3 () {this.setData({'array[0].text':'changed data 3','arr[0].text':'changed data','arr[1].text':'changed data','arr[2]-text':'changed data','_arr[2]-text':'changed data','text':'changed text',})console.log(this.data);},setData4 () {this.setData({array: [{text:'changed data 4',}],'arr[0].text':'changed data','arr[1].text':'changed data','arr[2]-text':'changed data','_arr[2-text':'changed data','text':'changed text',})console.log(this.data);},setData5 () {this.setData({array: [{text:'changed data 5',}]})console.log(this.data);},})<viewclass="index"><viewclass="index-desc">setData 测试</view><buttontype="default"bindtap="setData1">setData1</button><buttontype="default"bindtap="setData2">setData2</button><buttontype="default"bindtap="setData3">setData3</button><buttontype="default"bindtap="setData4">setData4</button><buttontype="default"bindtap="setData5">setData5</button></view>