在JS中解析形如JSON数据的对象数据的时候,采用的方法是用for循环遍历该对象,如果对象中还有对象,就可以先匹配第一层对象,找到需要的字符串值。如果==即将他PUSH入一个数据返回。
例如:
function getArr(id){ var arr=[]; for(var i=0;i<_side_menu_style[id];i++){ //用for循环解析数组 if(_side_menu_arr[id][i].text.checked){ //在这里是如果checked(被选中)的话,即用push保存这个数组元素到被返回的数组。 arr.push(i); } } return arr; //当以后调用 getArr方法的时候,就会得到这个返回的数组。 }
上面这一段代码只是没有匹配字符串,仅仅是如果checked即返回这个值。
function getInterfaceMenuZiId(id,arr){ var newArr=[]; for(var i=0;i<setProductMenu._data.length;i++){ if(i==id){ for(var k=0;k<setProductMenu._data[i].info.length;k++){ for(var j=0;j<arr.length;j++){ if(k==arr[j]){ newArr.push(setProductMenu._data[i].info[k].id); } } } } } return newArr; }
上面这段是更复杂的查询。
它解析的是这样的数据:
var product_menu_data={"code":0,"message":"success","data":[{"name":"COMPETITIN 竞技","id":"COMPETITIN","info":[{"name":"-男性",id:0},{"name":"-女性",id:0}]},{"name":"FITNESS 运动","id":"FITNESS","info":[{"name":"-男性",id:0},{"name":"-女性",id:0}]},{"name":"LEISURE 休闲","id":"LEISURE","info":[{"name":"-男性",id:0},{"name":"-女性",id:0}]},{"name":"JUNIOR 儿童","id":"JUNIOR","info":[{"name":"-男性",id:0},{"name":"-女性",id:0}]},{"name":"OTHER 其他","id":"OTHER","info":[{"name":"-泳镜",id:0},{"name":"-泳帽",id:0},{"name":"-泳包",id:0},{"name":"-其他",id:0}]},{"name":"CATALOG 商品目录","id":"CATALOG","info":[]}]};
而只要调用这些返回数组的方法,即得到这些数据,例如:
div.onclick=function (e){ var e = window.event || e; var srcElement = e.srcElement || e.target; var id=srcElement.parentNode.id.split("_")[1]; if(!_menu_click) return; if(_f_Id!=id){ _f_Id=id; blockThumbnails(id); getMenuStyle(_f_Id); sideMenuStatus(_f_Id,getArr(_f_Id)); productListInterface(_f_Id); } }
上面有一个方法sideMenuStatus()中的第二个参数是从getArr()方法得到的,它传的参数 _f_Id 也正是需要查询的键值。
function sideMenuStatus(id,arr){ for(var i=0;i<_side_menu_arr.length;i++){ for(j=0;j<_side_menu_arr[i].length;j++){ if(i==id){ for(k=0;k<arr.length;k++){ if(j==arr[k]){ if(_side_menu_arr[i][j].text.checked){ _side_menu_arr[i][j].bg.style.opacity=1; _side_menu_arr[i][j].bg.style.filter="alpha(opacity=100)"; _side_menu_arr[i][j].text.style.color="#0070bd"; _side_menu_arr[i][j].text.checked=true; }else{ //_side_menu_arr[i][j].bg.style.display="none"; _side_menu_arr[i][j].bg.style.opacity=0; _side_menu_arr[i][j].bg.style.filter="alpha(opacity=0)"; _side_menu_arr[i][j].text.style.color="#ffffff"; _side_menu_arr[i][j].text.checked=false; } } } }else{ //_side_menu_arr[i][j].bg.style.display="none"; _side_menu_arr[i][j].bg.style.opacity=0; _side_menu_arr[i][j].bg.style.filter="alpha(opacity=0)"; _side_menu_arr[i][j].text.style.color="#ffffff"; _side_menu_arr[i][j].text.checked=false; } } } }
sideMenuStatus()便是最终这些查询结果数组的归宿。
查找结果重组成的新数组将会被再次解析发挥它真正的作用。
浙公网安备 33010602011771号