js判断数组或对象是否相等
/** * 验证两个object 是否相同 * @param {Object} obj [需要进行验证的数据1] * @param {Object} newObj [需要进行验证的数据2] */ function objSame (obj,newObj) { let bol = true; if (Object.keys(obj).length != Object.keys(newObj).length) { return false; } for(let key in obj) { if ( obj[key] instanceof Object) { bol = objSame(obj[key],newObj[key]); if (!bol) { break; } } else if ( obj[key] instanceof Array) { bol = arrSame(obj[key],newObj[key]) if (!bol) { break; } } else if (obj[key] != newObj[key]) { bol = false; break; } } return bol } /** * 验证两个数组是否相同 * @param {Array} arr [需要进行验证的数据1] * @param {Array} newArr [需要进行验证的数据2] */ function arrSame (arr,newArr) { let bol = true; if (arr.length != newArr.length) { return false; } for (let i = 0, n = arr.length;i < n; i++) { if (arr[i] instanceof Array) { bol = arrSame(arr[i],newArr[i]) if (!bol) { break; } } else if (arr[i] instanceof Object) { bol = objSame(arr[i],newArr[i]) if (!bol) { break; } }else if (arr[i] != newArr[i]) { bol = false; break; } } return bol; }
也可以单纯的使用 for in :
/** * 验证两条数据是否相同 * @param {Array | Object} arg1 [需要进行验证的数据1] * @param {Array | Object} arg2 [需要进行验证的数据2] */ function isSame (arg1,arg2) { let bol = true; if (Object.keys(arg1).length != Object.keys(arg2).length) { return false; } for (let key in arg1) { if (typeof arg1[key] == 'object') { bol = isSame(arg1[key],arg2[key]) if (!bol) { break; } } else if(arg1[key] != arg2[key]){ bol = false; break; } } return bol }
我个人喜欢对数组使用for,对对象使用for in,以上代码只进行了粗略的测试,有什么问题欢迎指正,不胜感激。