使用javaScript的标准函数中json中的条件?
我有以下功能使用javaScript的标准函数中json中的条件?,javascript,Javascript,我有以下功能 compare: function (filterObj, sourceObj, fullMatch) { if (!filterObj) { return true; } var filterKeys = Object.keys(filterObj); var match = fullMatch; for (var i = 0,
compare: function (filterObj, sourceObj, fullMatch) {
if (!filterObj) {
return true;
}
var filterKeys = Object.keys(filterObj);
var match = fullMatch;
for (var i = 0, len = filterKeys.length; i < len; i++) {
var key = filterKeys[i];
var value = filterObj[key];
var isKeyInsourceObj = sourceObj.hasOwnProperty(key);
var isEqual = value === "*" || value === sourceObj[key];
var issourceObjPropArr = Array.isArray(sourceObj[key]);
var isValueArr = value === "*" || Array.isArray(value);
if (!fullMatch && isKeyInsourceObj) {
if (isEqual) {
return true;
}
if (issourceObjPropArr && sourceObj[key].indexOf(value) !== -1) {
return true;
}
} else
if (fullMatch && isKeyInsourceObj) {
var inArr = issourceObjPropArr && (sourceObj[key].indexOf(value) !== -1 || (isValueArr && App.Utils.findOne(sourceObj[key], value)));
if (!isEqual && !inArr) {
match = false;
}
}
else {
match = false;
}
}
return match;
},
此功能应定义为通用/标准功能,可在任何地方使用。解决方案:
compare: function (filterObj, sourceObj, fullMatch) {
if (!filterObj) {
return true;
}
var filterKeys = Object.keys(filterObj);
var match = fullMatch;
for (var i = 0, len = filterKeys.length; i < len; i++) {
var key = filterKeys[i];
var value = filterObj[key];
var isKeyInsourceObj = sourceObj.hasOwnProperty(key);
var isNotUnknown;
var isEmpty = App.Utils.isEmpty(sourceObj[key]);
if (!isEmpty) {
isNotUnknown = value === "!null";
}
var isEqual = value === "*" || value === sourceObj[key] || isNotUnknown;
var issourceObjPropArr = Array.isArray(sourceObj[key]);
var isValueArr = value === "*" || Array.isArray(value);
if (!fullMatch && isKeyInsourceObj) {
if (isEqual && isNotUnknown) {
return true;
}
if (issourceObjPropArr && sourceObj[key].indexOf(value) !== -1) {
return true;
}
}
else if (fullMatch && isKeyInsourceObj) {
var inArr = issourceObjPropArr && (sourceObj[key].indexOf(value) !== -1 || (isValueArr && App.Utils.findOne(sourceObj[key], value)));
if (!isEqual && !inArr && !isNotUnknown) {
match = false;
}
}
else {
match = false;
}
}
return match;
},
//check value is not undefined or null or 'unknown'
isEmpty: function (val) {
return (val === undefined || val == null || val === "unknown") ? true : false;
},
比较:函数(filterObj、sourceObj、fullMatch){
如果(!filterObj){
返回true;
}
var filterKeys=Object.keys(filterObj);
var匹配=完全匹配;
对于(变量i=0,len=filterKeys.length;icompare: function (filterObj, sourceObj, fullMatch) {
if (!filterObj) {
return true;
}
var filterKeys = Object.keys(filterObj);
var match = fullMatch;
for (var i = 0, len = filterKeys.length; i < len; i++) {
var key = filterKeys[i];
var value = filterObj[key];
var isKeyInsourceObj = sourceObj.hasOwnProperty(key);
var isNotUnknown;
var isEmpty = App.Utils.isEmpty(sourceObj[key]);
if (!isEmpty) {
isNotUnknown = value === "!null";
}
var isEqual = value === "*" || value === sourceObj[key] || isNotUnknown;
var issourceObjPropArr = Array.isArray(sourceObj[key]);
var isValueArr = value === "*" || Array.isArray(value);
if (!fullMatch && isKeyInsourceObj) {
if (isEqual && isNotUnknown) {
return true;
}
if (issourceObjPropArr && sourceObj[key].indexOf(value) !== -1) {
return true;
}
}
else if (fullMatch && isKeyInsourceObj) {
var inArr = issourceObjPropArr && (sourceObj[key].indexOf(value) !== -1 || (isValueArr && App.Utils.findOne(sourceObj[key], value)));
if (!isEqual && !inArr && !isNotUnknown) {
match = false;
}
}
else {
match = false;
}
}
return match;
},
//check value is not undefined or null or 'unknown'
isEmpty: function (val) {
return (val === undefined || val == null || val === "unknown") ? true : false;
},