Javascript 字典应用实例
字典时一个很有用的工具,在之前C#项目中有经常使用,这篇博文主要讲解在Javascript中,字典的实际应用场景
首先在JS中,是没有Dictionary‘类的,我们需要实现键值(KEY) -- 数值(VALUE)的对应关系,最好的办法就是用数组
首先交代下背景,我需要根据数组里的站点编号,获取到对应的站点名称
首先通过Thrift接口,获取到数据库里面的设备信息,通过Ajax传输到js页面,遍历数组
PS : 数据结构如下:
# 设备信息 struct Device{int id,# string name,.....};
# 站点信息 struct Site{int id,# string name,.....,list<Device> lsDevices};
# 区域信息 struct Area{int id,# string name,.....,list<Site> lsSites};
首先获取到区域信息,然后根据list<Site> lsSites的length判断有无站点,如果有,获取信息,以此类推
我在CSDN上面找到一个写的比较全的,在他的基础上,我做了稍许修改,提取了我需要的部分
代码如下:
1 function Dictionary() { 2 this.datastore = new Array(); 3 this.add = function (key, value) { 4 this.datastore[key] = value; 5 } 6 this.find = function (key) { 7 return this.datastore[key]; 8 } 9 }
然后实例化Dictionary类
var adddevide = new Dictionary();
开始遍历数组,传值,代码如下:
1 //设备编号字典 2 function dictionarydevice(list) { 3 var length = list.length; 4 //存贮设备ID 5 var ID = ""; 6 //存储设备名称 7 var Name = ""; 8 9 var i = 0; 10 var ii = 0; 11 var iii = 0; 12 13 for( i = 0;i<length;i++){ 14 ID = list[i].szAreaID; 15 Name = list[i].szAreaName; 16 adddevide.add(ID,Name); 17 if(list[i].lsSites.length === 0){ 18 break; 19 } 20 else{ 21 for( ii = 0;ii<list[i].lsSites.length;ii++){ 22 ID = list[i].lsSites[ii].szSiteID; 23 Name = list[i].lsSites[ii].szSiteName; 24 adddevide.add(ID,Name); 25 if(list[i].lsSites[ii].lsDevices.length === 0){ 26 break; 27 } 28 else{ 29 for( iii = 0;iii<list[i].lsSites[ii].lsDevices.length;iii++) { 30 ID = list[i].lsSites[ii].lsDevices[iii].szDeviceID; 31 Name = list[i].lsSites[ii].lsDevices[iii].szDeviceName; 32 adddevide.add(ID, Name); 33 } 34 } 35 } 36 } 37 } 38 39 alert(adddevide.find("JS0101")); 40 }
运行程序,出现JS0101对应的站点,字典完成