收藏
回答

setdata中数据对象为json,二层动态key,如何写?

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都是变量

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

3 个回答

  • 柯
    2021-06-16

    let floorId = 1;

    let markerName = "markers";

    let changeObj = `floorsMap.${floorId}.${markerName}` ;

    let changeContext = [{a:3},{a:2},{a:1}];

    this.setData({

    [`${changeObj}`]:changeContext

    })


    2021-06-16
    有用 2
    回复 5
    • 不焦
      不焦
      2021-06-16
      刚才试了下好像可以,这是基于什么原理来实现的? 麻烦告诉我下知识点,感谢
      2021-06-16
      回复
    • 不焦
      不焦
      2021-06-16
      这样有个问题呀,现在只是单纯加了markers,我接着还要加 polyline,polygons,继续这样写是不是和我之前的一样,指针改变了?
      2021-06-16
      回复
    • 不焦
      不焦
      2021-06-16
      多谢你了,成功了。不过原理我还是不太清楚
      2021-06-16
      回复
    • 柯
      2021-06-16回复不焦
      文档本身就有写明要array里面某个具体值可通过'array[0].index':'change data'实现,但是还要实现动态key,只需要用中括号括起来就变成变量。
      可以看一下es6的Computed property names。 
      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer
      2021-06-16
      回复
    • 不焦
      不焦
      2021-06-17回复
      谢谢你的帮助
      2021-06-17
      回复
  • 风禾
    风禾
    2021-06-15

    是不是主要想解决polygons重新拿过来的问题?在floorsMap对象上直接改不行嘛?就是直接let floorMapGlo=this.data.floorsMap

    2021-06-15
    有用 1
    回复 1
    • 不焦
      不焦
      2021-06-15
      这样也是个办法,其实我最终想要的是,可以直接setdata中去改变这个floorsMap
      2021-06-15
      回复
  • 微盟
    微盟
    2021-06-15
    this.setData({
        [`floorsMap.${floorId}.${markers}`]: 'dddd'
     })
    


    setData 的 key值是可以读取对象层级的哦。

    2021-06-15
    有用
    回复 3
    • 不焦
      不焦
      2021-06-15
      这种写法不行 ,会报错,之前写过,而且刚才我又重新试了下,会报undefined的,因为`floorsMap.${floorId}没有解析出来。
      2021-06-15
      回复
    • 微盟
      微盟
      2021-06-16回复不焦
      2021-06-16
      回复
    • 微盟
      微盟
      2021-06-16回复不焦
      看你问题的描述。不确定你代码中真实变量名字是 floorMap   还是 floorsMap 哦~
      2021-06-16
      回复
登录 后发表内容