1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /*
- * @Description:
- * @Autor: kindring
- * @Date: 2021-09-30 10:36:44
- * @LastEditors: kindring
- * @LastEditTime: 2021-10-15 17:32:22
- * @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);
|