JS 通过字符串取得对应对象
//对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; };