//对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 通过字符串取得对应对象的更多相关文章

  1. js json字符串与json对象互相转换(最全)

      1.json字符串转json对象 使用场景:通常在取json字符串里具体的值时,会用到. var jsonString = '{"name":"Marydon&quo ...

  2. JS 样式字符串 转 JSON对象

    项目中需要把div 上的样式值转成数据展示 形如: padding: 7px 2px 1px 3px; color: rgb(238, 65, 65); background-color: rgb(2 ...

  3. Js将字符串转换成对象或数组en

    举个例子 var test='{ colkey: "col", colsinfo: "NameList" }' a.将文本转换成对象 var test='{ c ...

  4. js中字符串转json对象时报错: Uncaught SyntaxError: Unexpected token s in JSON at position 2

    解决方法: js中获取jsp的返回值 var json='${channels}' var channels = JSON.parse(json);就报上面的错. json的值最终会转成这种json格 ...

  5. js时间字符串转Date对象

    var DATE_REGEXP = new RegExp("(\\d{4})-(\\d{2})-(\\d{2})([T\\s](\\d{2}):(\\d{2}):(\\d{2})(\\.(\ ...

  6. js 将json字符串转换为json对象的方法解析

    推荐: var obj = eval('(' + str + ')'); var last=JSON.stringify(obj); //将JSON对象转化为string字符 例如: JSON字符串: ...

  7. Js判断对象是否为空,Js判断字符串是否为空

    Js判断对象是否为空,Js判断字符串是否为空,JS检查字符串是否为空字符串 >>>>>>>>>>>>>>>&g ...

  8. js中json字符串与json对象的相互转换

    web前端开发过程中,数据传输json是以字符串的形式传递,而js操作的是JSON对象. 一.JSON字符串转换为JSON对象 var obj = JSON.parse(str[, reviver]) ...

  9. 如何将字符串格式的对象转换成真正的js对象?

    1.如何将字符串格式的对象转换成真正的js对象? <script>//eval 的作用eval('var a = 100');console.log(a);</script> ...

随机推荐

  1. MySQL replicate-ignore-db详解

    1:官方的解释是:在主从同步的环境中,replicate-ignore-db用来设置不需要同步的库.解释的太简单了,但是里面还有很多坑呢. 生产库上不建议设置过滤规则.如果非要设置,那就用Replic ...

  2. CentOS 6.9下安装PostgreSQL

    操作系统:CentOS6.9_x64 PostgreSQL官方网址: https://www.postgresql.org/ 安装数据库 使用如下命令: yum install postgresql- ...

  3. SoapUI Pro Project Solution Collection-access the soapui object

    Technorati 标签: Soapui pro,web service,apI Testing

  4. 【PMP】组织级项目管理(OPM)和战略

    OPM指为实现组织战略目标而整合项目组合.项目集和项目管理与组织驱动因素的框架. OPM旨在确保组织开展正确的项目并合适地分配关键资源. 组织项目管理 此图来源于PMBOK第六版

  5. 浅谈常用的几种web攻击方式

    一.Dos攻击(Denial of Service attack) 是一种针对服务器的能够让服务器呈现静止状态的攻击方式.有时候也加服务停止攻击或拒绝服务攻击.其原理就是发送大量的合法请求到服务器,服 ...

  6. zabbix监控k8s出现的pod error status

    配置zabbix客户端配置文件 vim /etc/zabbix/zabbix_agentd.conf 添加  Include=/etc/zabbix/zabbix_agentd.d/ #!/bin/b ...

  7. WWDC 2018:Swift 更新了什么?

    本文转载自:https://juejin.im/post/5b1cb5805188257d507be5d4所有权归原文所有 WWDC 2018 Session 401 What's New in Sw ...

  8. opencv-android笔记1:android studio 2.3 + opencv-android-sdk 实现 camera预览

    Android studio环境配置不再赘述,可以参照我的其他博客. Android应用程序开发环境搭建:http://blog.csdn.net/ja33son/article/details/61 ...

  9. mysql 编译安装 window篇

    传送门 # mysql下载地址 https://www.mysql.com/downloads/ # 找到MySQL Community Edition (GPL) https://dev.mysql ...

  10. Egret里用矢量挖圆形的洞

    项目里需要用到,但是不是用在新手引导上,下面的代码可以绘制一个圆的四分之一,用四个即可拼出一个圆. private createShape(): egret.Shape { let magicNum ...