/* * @Description: * @Autor: kindring * @Date: 2021-09-30 10:36:44 * @LastEditors: kindring * @LastEditTime: 2021-10-12 14:12:10 * @LastDescript: */ // 判断最终值是否相同 function isEqual(obj1, obj2) { if (obj1 instanceof Array) { if (obj1.length != obj2.length) { return false } for (let index = 0; index < obj1.length; index++) { if (obj1[index] instanceof Object) { if (!isEqual(obj1[index], obj2[index])) { return false } } else { if (obj1[index] != obj2[index]) { return false } } } } else if (obj1 instanceof Object) { if (Object.keys(obj1).length != Object.keys(obj2).length) { console.log('对象值数量不一致'); return false } for (let key in obj1) { // 防止循环引用 if (obj1[key] instanceof Object) { if (!isEqual(obj1[key], obj2[key])) { return false } } else { if (obj1[key] != obj2[key]) { return false } } } } else { return obj1 == obj2 } return true } console.log(isEqual(1, 2)); // false console.log(isEqual([1, 2], [1, 2])); // true console.log(isEqual([1], [1, 2])); // false console.log(isEqual([{ a: 1, b: 2 }], [{ a: 1, b: 2 }])); // true console.log(isEqual([{ a: 1, b: 2 }], [{ a: 1, b: 1 }])); // false console.log(isEqual([{ a: 1, b: 2 }], [{ a: 1 }])); // false console.log(isEqual({ a: 1, b: 2, c: [1, 2] }, { a: 1, b: 2, c: [1, 2] })); // true function deepClone(object, weakMap = new WeakMap()) { if (typeof object === 'object') { let cloneTarget = Array.isArray(object) ? [] : {} if (weakMap.get(object)) { return weakMap.get(object) } console.log(); weakMap.set(object, cloneTarget) for (const key in object) { cloneTarget[key] = deepClone(object[key], weakMap) } return cloneTarget } else { return object } } let o1 = { a: 1, b: [{ c: 2, d: 3 }] } console.log(o1); let o2 = deepClone(o1) console.log(o2); o1.a = 3; console.log(o2);