//对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. PL/SQL学习笔记之数据类型中的标量、LOB

    一:标量 标量 即 基本数据类型,主要有4种:数值.字符.布尔类型.日期时间. 1:数值类型 数据类型 描述 PLS_INTEGER 通过2,147,483,647到-2147483648范围内有符号 ...

  2. python3用BeautifulSoup用字典的方法抓取a标签内的数据

    # -*- coding:utf-8 -*- #python 2.7 #XiaoDeng #http://tieba.baidu.com/p/2460150866 #标签操作 from bs4 imp ...

  3. 使用zlib库进行目录打包

    代码很简单,具体过程就不写了. 关于加密压缩,可以看http://www.zlib.net/zlib_faq.html#faq38 中的描述,说是不支持的,但是创建的时候可以传入密码进去,不过我还没有 ...

  4. 让人非常easy误解的TCP拥塞控制算法

    正文 非常多人会觉得一个好的TCP拥塞控制算法会让连接加速,这样的观点是错误的.恰恰相反,全部的拥塞控制算法都是为了TCP能够在贪婪的时候悬崖勒马,大多数时候.拥塞控制是减少了数据发送的速度. 我在本 ...

  5. Atitit 数据库 标准库  sdk 函数库 编程语言 mysql oracle  attilax总结

    Atitit 数据库 标准库  sdk 函数库 编程语言 mysql oracle  attilax总结 1.1. 常见的编程语言以及数据库 sql内部函数库标准化库一般有以下api1 1.2. 各个 ...

  6. java实现urlencode

    https://www.cnblogs.com/del88/p/6496825.html ****************************************************** ...

  7. 11款最轻量级的CSS框架

    日子一去不复返了HTML用于造型的网页.今天,CSS规则,很难想象没有它的任何网页设计.CSS在最近非常先进,用于创建复杂的Web设计和风格.那么,我们为什么要使用CSS框架?答案很简单.CSS框架主 ...

  8. 8个非常个性化的CSS3单/复选框

    单选框和复选框在网页表单中应用十分广泛,但是浏览器默认自带的单选框和复选框样式不仅不统一,而且大多都比较简单丑陋.本文给大家介绍了一些基于CSS3的个性化单选框和复选框,一些选中动画是基于jQuery ...

  9. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-5 底层驱动之旋转编码器

    源视频包下载地址:链接:http://pan.baidu.com/s/1mhENI9i密码:mf1x 银杏科技优酷视频发布区:http://i.youku.com/gingko8

  10. compass Errno::EACCES on line ["897"] of C: Permission denied

    具体原因不清楚,应该是与新版的sass有关. 目前的处理方法就是安装原来的版本 gem uninstall compass gem uninstall sass gem install sass –v ...