分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

JS 通过字符串取得对应对象

发布时间:2023-09-06 01:55责任编辑:林大明关键词:暂无标签
//对Array的扩展,查找所有满足条件的元素 ???Array.prototype.findAll = function (match) { ???????var tmp = []; ???????for (var i = 0; i < this.length; i++) { ???????????if (match(this[i])) ???????????????tmp.push(this[i]); ???????} ???????return tmp; ???}/** ???*作者:xrl ???*通过数符串对到实例 ???*例如:PRConfig.comboUISet[id][0]、PRConfig.comboUISet[0].comboUIList[id=‘2‘] ???*/ ???String.prototype.GetInstanceOne = function () { ???????function GetObjVal(temp, attrStr) { ???????????if (temp) { ???????????????return temp[attrStr]; ???????????} else { ???????????????return eval(attrStr); ???????????} ???????} ???????//检查数据格式是否正确 ???????function CheckArrayFormat(temp, attrStr) { ???????????var arrtNameRegExpStr = "([_$A-Za-z][_$0-9A-Za-z]{0,254})";//匹配以_$或字母开头的变量名 ???????????var intRegExpStr = "(0|[1-9]*[1-9][0-9]*)"; //大于0正整数 ???????????var DQMarkRegExpStr = ‘(\\".*\\")‘; ???????????var SQMarkRegExpStr = "(\\‘.*\\‘)"; ???????????var arrtEqualValRegExpStr = "(" + arrtNameRegExpStr + "=(" + DQMarkRegExpStr + "|" + SQMarkRegExpStr + "|" + intRegExpStr + "))"; ???????????var arrtNameRegExp = new RegExp(arrtNameRegExpStr, "i"); ???????????var intRegExp = new RegExp(intRegExpStr, "i"); ???????????var DQMarkRegExp = new RegExp(DQMarkRegExpStr, "i"); ???????????var SQMarkRegExp = new RegExp(SQMarkRegExpStr, "i"); ???????????var arrtEqualValRegExp = new RegExp(arrtEqualValRegExpStr, "g"); ???????????var arrExp = new RegExp("^" + arrtNameRegExpStr + "\\[" + intRegExpStr + "|" + arrtNameRegExpStr + "|" + arrtEqualValRegExpStr+"\\]*$","i"); ???????????if (arrExp.test(attrStr)) { ???????????????//取得变量名 ???????????????var varname = attrStr.split(‘[‘)[0]; ???????????????temp = GetObjVal(temp, varname)//取得该属性名字 ???????????????var zkhRegExp =/\[[^\]]*\]/g; ???????????????var zkhStrArr = attrStr.match(zkhRegExp); ???????????????for (var j = 0; j < zkhStrArr.length; j++){ ???????????????????var zkhStr = zkhStrArr[j]; ???????????????????var zkhStrIn = zkhStr.substring(1, zkhStr.length - 1) ???????????????????if (arrtEqualValRegExp.test(zkhStrIn)) { ???????????????????????var zkhStrInArr = zkhStrIn.split(‘=‘); ???????????????????????var zkhStrInAttrName = zkhStrInArr[0]; ???????????????????????var zkhStrInAttrVal = zkhStrInArr[1]; ???????????????????????if (DQMarkRegExp.test(zkhStrInAttrVal) || SQMarkRegExp.test(zkhStrInAttrVal)) { ???????????????????????????var zkhStrInAttrValSub = zkhStrInAttrVal.substring(1, zkhStrInAttrVal.length - 1) ???????????????????????????temp = temp.findAll(function (obj) { ???????????????????????????????if (typeof (obj) == "object") { ???????????????????????????????????if (obj[zkhStrInAttrName] == zkhStrInAttrValSub) ???????????????????????????????????????return true; ???????????????????????????????} ???????????????????????????????return false; ???????????????????????????}); ???????????????????????} else if (intRegExp.test(zkhStrInAttrVal)) { ???????????????????????????temp = temp.findAll(function (obj) { ???????????????????????????????if (typeof (obj) == "object") { ???????????????????????????????????if (obj[zkhStrInAttrName] == parseInt(zkhStrInAttrValSub)) ???????????????????????????????????????return true; ???????????????????????????????} ???????????????????????????????return false; ???????????????????????????}); ???????????????????????} ???????????????????}else if (intRegExp.test(zkhStrIn)) { ???????????????????????temp = GetObjVal(temp, zkhStrIn); ???????????????????} else if (arrtNameRegExp.test(zkhStrIn)) { ???????????????????????temp=temp.findAll(function (obj) { ???????????????????????????if (typeof (obj) == "object") { ???????????????????????????????if (obj[zkhStrIn]) ???????????????????????????????????return true; ???????????????????????????} else if (typeof (obj) == "string") { ???????????????????????????????if (obj == zkhStrIn) { ???????????????????????????????????return true; ???????????????????????????????} ???????????????????????????} ???????????????????????????return false; ???????????????????????}); ???????????????????} ???????????????????//如果返回数组只一条数据就将第一条数据对象转换临时对象返回 ???????????????????if (temp && temp.length == 1) { ???????????????????????temp = temp[0]; ???????????????????} ???????????????} ???????????} else { ???????????????throw new SyntaxError(‘Array String Expression Error!‘); ???????????} ???????????return temp; ???????} ???????var attrPointArr = this.split(‘.‘); ???????var tempObj = null; ???????try { ???????????for (var i = 0; i < attrPointArr.length; i++) { ???????????????var attrPoint = attrPointArr[i]; ???????????????//判断是否有数组情况 ???????????????if (attrPoint.indexOf("[") > 0) { ???????????????????tempObj = CheckArrayFormat(tempObj, attrPoint); ???????????????} else { ???????????????????tempObj=GetObjVal(tempObj, attrPoint); ???????????????} ???????????} ???????} catch (e) { ???????????console.error(e); ???????????return tempObj; ???????} ???????return tempObj; ???};

JS 通过字符串取得对应对象

原文地址:https://www.cnblogs.com/xiaoruilin/p/9064203.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved