//对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. spark run using IDE / Maven

    来自:http://stackoverflow.com/questions/26892389/org-apache-spark-sparkexception-job-aborted-due-to-st ...

  2. JAVA四则运算字符串解释器

    最近学习到后缀表达式,于是基于后缀表达式的思想,写了一个四则运算解释器,输入字符串类型的四则运算表达式,可以直接得到结果,支持括号嵌套. 实现时主要考虑以下两点: 字符串中运算符和数字分离 运算符优先 ...

  3. 12.翻译系列:EF 6 中配置一对多的关系【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-f ...

  4. keras 文本分类 LSTM

    首先,对需要导入的库进行导入,读入数据后,用jieba来进行中文分词 # encoding: utf-8 #载入接下来分析用的库 import pandas as pd import numpy as ...

  5. logback配置详解

    本文转自:https://segmentfault.com/a/1190000008315137 概览 简单地说,Logback 是一个 Java 领域的日志框架.它被认为是 Log4J 的继承人.L ...

  6. pycharm启动慢 –xms -xmx相关参数设置

    Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) sp ...

  7. linux每日命令(31):tar命令

    tar命令可以为linux的文件和目录创建档案.利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来在磁带上创建档案,现在,用户可以在 ...

  8. Haproxy全透明代理

    1. 系统环境搭建 操作系统Centos7 内核版本3.10 Centos7已自带TPROXY模块,不需要安装TPROXY 2. Haproxy下载,编译,安装,配置 下载地址 http://www. ...

  9. 如何进行 iPhone 客户端的软件测试

    如何进行 iPhone 客户端的软件测试客户端版APP主要是通过苹果的APP Store来进行安装的.在测试时,开发会先在本地苹果机上打好包,然后我们在Xcode上进行安装或者直接在开发提供的网址上下 ...

  10. Java知多少(8)类库及其组织结构

    Java 官方为开发者提供了很多功能强大的类,这些类被分别放在各个包中,随JDK一起发布,称为Java类库或Java API. API(Application Programming Interfac ...