js中的对象数组类型数据对比
// 比较两个对象是否相同 function compareObj(obj, newObj) { let flag = true; if (Object.keys(obj).length != Object.keys(newObj).length) { return false; } for (let key in obj) { if (Array.isArray(obj[key])) { console.log(key, obj[key]) flag = compareArr(obj[key], newObj[key]) if (!flag) { break; } } else if (obj[key] instanceof Object) { flag = compareObj(obj[key], newObj[key]); if (!flag) { break; } } else if (obj[key] != newObj[key]) { flag = false; break; } } return flag } // 比较两个数组是否相同 function compareArr(arr, newArr) { let flag = true; if (arr.length != newArr.length) { return false; } for (let i = 0, n = arr.length; i < n; i++) { if (arr[i] instanceof Array) { flag = compareArr(arr[i], newArr[i]) if (!flag) { break; } } else if (arr[i] instanceof Object) { flag = compareObj(arr[i], newArr[i]) if (!flag) { break; } } else if (arr[i] != newArr[i]) { flag = false; break; } } return flag; }
值得注意的是 Array instanceof Object 和 Array instanceof Array返回的都是true,因此如果用instanceof方法来判断数据类型时,要先判断是否为数组
补充:一个规则的乱序数组对比
function compareArr(arr, newArr, id) { let tmp = []; if (arr.length != newArr.length) { return false; } else { for (let i = 0; i < arr.length; i++) { for (let j = 0; j < newArr.length; j++) { if (arr[i][id] == newArr[j][id]) { tmp.push(i) } } } if (tmp.length == arr.length) { return true; } else { return false; } } }