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;
    };

原文地址:https://www.cnblogs.com/xiaoruilin/p/9064203.html

时间: 2024-10-03 22:29:31

JS 通过字符串取得对应对象的相关文章

js 的字符串json与对象互转

利用原生JSON对象,将对象转为字符串 var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; jsObj.name = 'CSS3'; jsObj.date = '8 May, 2011'; var str = JSON.stringify(jsObj); alert(str); 从JSON字符串转为对象 var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; jsObj.name = 'CSS3'; jsObj.da

js 时间戳 字符串 转 时间对象

var  okkkk1 = new Date(1394218983000); var  okkkk2 = new Date(1394218983000); var  okkkk3 = new Date(1394046183000); var  okkkk4 = new Date(1394910183000); var  okkkk5 = new Date(1394305383000); var  okkkk6 = new Date(1395082983000); var  okkkk7 = ne

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

js 将json字符串转换为json对象的方法解析 将json字符串转换为json对象的方法.在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键 例如: JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象:var str2 = { "name": &

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

例如: JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象:var str2 = { "name": "cxh", "sex": "man" }; 一.JSON字符串转换为JSON对象 要使用上面的str1,必须使用下面的方法先转化为JSON对象: //由JSON字符串转换为JS

js 将json字符串转换为json对象

要引入:jquery-json-2.4.js 在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如: JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象: var str2 = { "name": "cxh", "

JS json字符串转对象、对象转字符串

JSON是javascript原生格式,在JavaScript中处理json数据不需要任何特殊的API或者工具包. JSON中,有两种结构:对象和数组. 在数据传输流中,json是以文本,即字符串的形式传递的,而JS操作的是json对象,因此,json对象和json字符串之间的互相转换关系是关键. 一.json字符串转json对象 1.json字符串转json对象 var str = '{"a":"a1","b":"b1"}'

JS中,JSON 和 对象互转,数组和字符串的转换?

JSON 与 J对象转化 要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法: 如下: var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}' 要实现从 JSON 转换为对象,使用 JSON.parse() 方法: 如下: var obj = JSON.parse('{&q

js 将json字符串转换为json对象或json对象转换成json字符串

JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象:var str2 = { "name": "cxh", "sex": "man" }; 一.JSON字符串转换为JSON对象 要使用上面的str1,必须使用下面的方法先转化为JSON对象: //由JSON字符串转换为JSON对象

js 中json字符串转化json对象

JSON字符串:var str = '{ "name": "cxh", "sex": "man" }'; JSON对象:var str = { "name": "cxh", "sex": "man" }; 一.JSON字符串转换为JSON对象 //由JSON字符串转换为JSON对象 方法一:  var obj = eval('(' + str +