您的位置:首页

判断两个对象是否相等

2017-07-11 11:26 417 查看
function Compare(objA, objB) {
if (!isObj(objA) || !isObj(objB)) return false; //判断类型是否正确
if (getLength(objA) != getLength(objB)) return false; //判断长度是否一致
return CompareObj(objA, objB, true);//默认为true
}


//获取对象的length
function getLength(object) {
var count = 0;
for (var i in object) count++;
return count;
}


function CompareObj(objA, objB, flag) {
for (var key in objA) {
if (!flag){
break;//flag为false,无需比较,跳出整个循环
}
if (!objB.hasOwnProperty(key)) {
flag = false;
break;
}
if (!isArray(objA[key])){//子级不是数组时,比较属性值
if (objB[key] != objA[key]) {
flag = false;
break;
}
} else {
if (!isArray(objB[key])) {
flag = false;
break;
}
var oA = objA[key], oB = objB[key];
if (oA.length != oB.length) {
flag = false;
break;
}
for (var k in oA) {
if (!flag) //这里跳出循环是为了不让递归继续
break;
flag = CompareObj(oA[k], oB[k], flag);
}
}
}
return flag;
}


function isObj(object) {
return object && typeof (object) == 'object' && Object.prototype.toString.call(object).toLowerCase() == "[object object]";
}
function isArray(object) {
return object && typeof (object) == 'object' && object.constructor == Array;
}


实例:

//添加修改服务列表数据

$("#addWindow").bind("click", function() {
var fileType = $("input[type='radio'][name='fileType']:checked").val();
var filePath = $("#filePath_id").val();
var fileExtType = $("#fileExtType_hidden").val();
var _privilege_str = "";
$("input[name='privilege']:checked").each(function() {
_privilege_str += $(this).val();
});

//必填项校验
var alert_msg = "";
var filePathRequried = '[<s:text  name="com.vrv.cems.policy.template.fileProtectionAudit.fileOrFolderPath"/>]<s:text  name="com.vrv.cems.policy.template.fileProtectionAudit.trustProcessList.required"/>';

if (fileType != TYPE_ALLFILE) {
if (filePath == "") {
alert_msg = filePathRequried;
}
}
if (!checkPath(filePath)) {
dialogMsg("非法文件夹路径!", -1);
return false;
}
if (alert_msg != "") {
dialogMsg(alert_msg, -1);
return false;
}
//添加
var dataObj = {
type : fileType,
filePath : filePath,
fileExtType : fileExtType,
privilege : _privilege_str
};

var dataList = $("#protectFileList_table").jqGrid("getRowData");
var num = dataList.length;
if (operate == "add") {
for (var i = 0; i < dataList.length; i++) {
if (Compare(dataObj,dataList[i])) {
dialogMsg("添加的数据重复!", -1);
return;
}
}
$("#protectFileList_table").jqGrid("addRowData", num + 1, dataObj);
i++;
} else {
//修改
var id = $("#protectFileList_table").jqGrid('getGridParam', 'selrow');
dataList.splice(id-1, 1);
for (var i = 0; i < dataList.length; i++) {
if (Compare(dataObj,dataList[i])) {
dialogMsg("编辑的数据重复!", -1);
return;
}
}
$("#protectFileList_table").jqGrid("setRowData", id, dataObj);
}
$("#protectFileList_window").modal("hide");
var data = $("#protectFileList_table").jqGrid("getRowData");
$("#protectFileList_hidden").val(JSON.stringify(data));

});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: