1 前言
由于项目需要,需要实现获取服务器不同网卡扫局域网中的某种类型设备,然而不同服务器的网卡个数是不相同的,从而需要动态增加未知属性来统计不同网卡扫到的设备个数。
2 代码
function nicClassify(json){ var ret = {}; var jsonArr = json.split(","); var setArr = uniqueArr(jsonArr); var map={}; if(json == ""){ return ret; } //init ret.wireless = 0; var k=0; for(var j = 0; j < setArr.length;j++){ var data = setArr[j].toLowerCase(); if(!(data.indexOf("wireless") > -1 || data.indexOf("wifi") > -1 || data.indexOf("wlan") > -1 || data.indexOf("wi-fi") > -1)){ eval("ret.wire"+k+"=0"); eval("map[‘"+r(data)+"‘]=‘wire"+k+"‘"); k++; } } for(var i = 0; i < jsonArr.length; i++){ var data = jsonArr[i].toLowerCase(); if(data.indexOf("wireless") > -1 || data.indexOf("wifi") > -1 || data.indexOf("wlan") > -1 || data.indexOf("wi-fi") > -1){ ret.wireless ++; }else { for(var kk = 0; kk < k; kk++){ if(eval("map[‘"+r(data)+"‘]=‘wire"+kk+"‘")){ eval("ret.wire"+kk+"++"); } } } } return ret; } function r(s){ return s.replaceAll(" ","_"); } function uniqueArr(array){ var n = []; for(var i = 0; i < array.length; i++){ if (n.indexOf(array[i]) == -1) n.push(array[i]); } return n; } //Sample: jsonArrNICs ="wifi,wi-fi,a,a,b,b,b,wlan"; var nicRetMap = nicClassify(jsonArrNICs);
3 说明
一般来说,map.attr1 = val1 等价于map["attr1"] = val1,但是当attr1是带有 ’ ‘,’-‘ 等符号,不能直接使用’.‘操作符来访问。