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;
};
JS 通过字符串取得对应对象的更多相关文章
- js json字符串与json对象互相转换(最全)
1.json字符串转json对象 使用场景:通常在取json字符串里具体的值时,会用到. var jsonString = '{"name":"Marydon&quo ...
- JS 样式字符串 转 JSON对象
项目中需要把div 上的样式值转成数据展示 形如: padding: 7px 2px 1px 3px; color: rgb(238, 65, 65); background-color: rgb(2 ...
- Js将字符串转换成对象或数组en
举个例子 var test='{ colkey: "col", colsinfo: "NameList" }' a.将文本转换成对象 var test='{ c ...
- js中字符串转json对象时报错: Uncaught SyntaxError: Unexpected token s in JSON at position 2
解决方法: js中获取jsp的返回值 var json='${channels}' var channels = JSON.parse(json);就报上面的错. json的值最终会转成这种json格 ...
- js时间字符串转Date对象
var DATE_REGEXP = new RegExp("(\\d{4})-(\\d{2})-(\\d{2})([T\\s](\\d{2}):(\\d{2}):(\\d{2})(\\.(\ ...
- js 将json字符串转换为json对象的方法解析
推荐: var obj = eval('(' + str + ')'); var last=JSON.stringify(obj); //将JSON对象转化为string字符 例如: JSON字符串: ...
- Js判断对象是否为空,Js判断字符串是否为空
Js判断对象是否为空,Js判断字符串是否为空,JS检查字符串是否为空字符串 >>>>>>>>>>>>>>>&g ...
- js中json字符串与json对象的相互转换
web前端开发过程中,数据传输json是以字符串的形式传递,而js操作的是JSON对象. 一.JSON字符串转换为JSON对象 var obj = JSON.parse(str[, reviver]) ...
- 如何将字符串格式的对象转换成真正的js对象?
1.如何将字符串格式的对象转换成真正的js对象? <script>//eval 的作用eval('var a = 100');console.log(a);</script> ...
随机推荐
- PPPoE图解
- 关于JAVA 中的Configuration类
properties文件是Java平台默认的配置文件格式,其优点是格式清晰,简单易懂,使用commons-configuration读取properties文件也比较简单,代码如下: 基本用法: 1. ...
- 监控JVM内存使用情况,剩余空间小于2M时报警
一个简单的类,用来监控JVM内存使用情况,剩余空间小于2M时报警. import java.lang.management.ManagementFactory; import java.lang.ma ...
- docker部署maven私有仓库 nexus3
docker pull sonatype/nexus3: docker run -d --name nexus3.x --network host -v /volume-data/nexus3/nex ...
- xml解析、写入遇到的坑
前言 最近在看一个线上xml文件导出的问题,需求如下: 从我们平台导出一个后缀为tmx的术语语料数据(实际内容为xml文件),然后导入到其他第三方平台发现无法导入. 从其他平台导入的tmx文件无法导入 ...
- 【iCore4 双核心板_ARM】例程二十一:LWIP_TCP_SERVER实验——以太网数据传输
实验现象: 核心代码: int main(void) { system_clock.initialize(); led.initialize(); adc.initialize(); delay.in ...
- Ansible and FileBeta
使用Ansible通过ssh批量读取和修改Client设备 1. 安装ansible工具 apt-get install ansible 2. 添加需要访问的client信息 ansible配置文件如 ...
- Kubernetes集群部署之三ETCD集群部署
kuberntes 系统使用 etcd 存储所有数据,本文档介绍部署一个三节点高可用 etcd 集群的步骤,这三个节点复用 kubernetes 集群机器k8s-master.k8s-node-1.k ...
- 说说自己对RESTful API的理解
REST不是英文上的rest单词,其英文缩写为presentational State Transfer ,直译为表现状态转移,咋看起来很学术,不懂,其实不用去死抠这个词的意思.REST是一种约束和架 ...
- .NET中进行Base64加密解密
方法一: /// <summary> /// Base64加密 /// </summary> /// <param name="Message"> ...