判断两个对象是否相等

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));
            
        });
原文地址:https://www.cnblogs.com/goloving/p/7149697.html