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