js如何处理前台传递过来的Map

1.背景

实习期间,调试BUG的时候发现一个很奇怪的事,同样是Map传递到前台给js解析,为什么一个能直接使用eval 接收,另一个却不行
后台使用model.set(“data”,mapObject);
前台使用 var data=eval(“(“+’${data}’+”)”)
然后获得data[‘key’]

2.原因分析

data.put("test1","苹果");
data.put("test2","香蕉");

如果直接是Map对象放置在model的属性中,拿到${data} 为
{test1=苹果,test2=香蕉}
当然进一步处理还是可以实现通过Key 拿到Value
比如:

var data = '${data}';
data.replace("/=/g",":");
data['test1']

但是这种方法有缺陷,如果键值test1,中间有逗号,那到js就很难进行解析了,试问{te,st1=苹果,te,st2=香蕉}这样的串,js 怎么能认识呢?

3建议解决方案

我们可以在后台做一个处理,将Map 变成json字符串。然后传递到前台,实习公司也是用的第三方的类(阿里巴巴的)即可,这种工具类很多,就不再这里多说了,只是提供一个解决问题的思路。
同样是上面的例子,变成json串到前台就会是这样的。
${data}就会是:{“test1”:”苹果”,”test2”:”香蕉”},看到区别了吗?这样完全就不需要进行多余的操作了 看js 如何操作

后台
map-》 jsonString
前台
var data = eval("("+'${data}'+")")

data[‘key’] 即可获取到value

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值