floorsMap:{
1:{
markers:[{},{},{},],
polyline:[{},{},{}],
polygons:[{},{},{},]
},
2:{
markers:[{},{},{},],
polyline:[{},{},{}],
polygons:[{},{},{},]
},
3:{
markers:[{},{},{},],
polyline:[{},{},{}],
polygons:[{},{},{},]
},
}
目前使用地图组件,需要有个json来存储对应楼层的marker、polyline、polygons数据,在使用setdata时,楼层号对应的1/2/3,需要动态生成、对应的polyline、marker、polygons也需要动态生成,这样setdata该如何写?我现在是参考网上其他人的写法,先写个json对象把数据保存起来,再setdata,但是这样每次,floormap都会指向一个新的对象,那我需要把之前处理的polyline数据重新setdata进对象,而且容易出问题。
let floorMapGlo={}; //这个为全局变量
let key = '' + floorId + '';
floorMapGlo[key] = { polygons: polygonsGlo }; //polygonsGlo 为已经处理好的数据
this.setData({
floorsMap: floorMapGlo,
});
上面这样设置了,对应楼层的polygons,但是再处理完marker数据时,设置marker数据时,就需要这样写
let key = '' + floorId + '';
floorMapGlo[key] = { polygons: this.data.floorMap[floorId].polygons, markers:markersGlo }; //这里因为等于了一个新的对象,所以需要把之前的polygons重新拿过来
this.setData({
floorsMap: floorMapGlo,
});
请问有什么简单的办法,可以直接setdata这样的数据吗?
floorsMap[floorId][markers]=.......
floorId、markers都是变量

let floorId = 1;
let markerName = "markers";
let changeObj = `floorsMap.${floorId}.${markerName}` ;
let changeContext = [{a:3},{a:2},{a:1}];
this.setData({
[`${changeObj}`]:changeContext
})
this.requestPolygons(defaultFloor[0]).then(() => {console.log(f1Plgy);let polygonsName = 'polygons';let polineName = 'polyline';let floorsMapObj = `floosMap.${defaultFloorId}.${polygonsName}`;let floorsMapObj1 = `floosMap.${defaultFloorId}.${polineName}`;this.parsePolygons(f1Plgy);this.setData({polygons: polygonsGlo,[`${floorsMapObj}`]: polygonsGlo}, function () {this.requestPolyline(defaultFloor[0]).then(() => {console.log(f1Line);this.parsePolyline(f1Line);this.setData({polyline: polylineGlo,[`${floorsMapObj1}`]: polylineGlo});});})});},可以看一下es6的Computed property names。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer
是不是主要想解决polygons重新拿过来的问题?在floorsMap对象上直接改不行嘛?就是直接let floorMapGlo=this.data.floorsMap
this.setData({ [`floorsMap.${floorId}.${markers}`]: 'dddd' })setData 的 key值是可以读取对象层级的哦。
报错可能是本身 floorsMap 变量还没被赋值。参考这个文档的最下面的 setData 写法即可(页面关键字 changeItemInArray)。https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html