vuecssuiant-designantdreactantantd-vueenterprisefrontendui-designvue-antdvue-antd-uivue3vuecomponent
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.1 KiB
50 lines
1.1 KiB
import { toRaw } from 'vue'; |
|
|
|
function shallowEqual(objA: any, objB: any, compare?: any, compareContext?: any) { |
|
let ret = compare ? compare.call(compareContext, objA, objB) : void 0; |
|
|
|
if (ret !== void 0) { |
|
return !!ret; |
|
} |
|
|
|
if (objA === objB) { |
|
return true; |
|
} |
|
|
|
if (typeof objA !== 'object' || !objA || typeof objB !== 'object' || !objB) { |
|
return false; |
|
} |
|
|
|
const keysA = Object.keys(objA); |
|
const keysB = Object.keys(objB); |
|
|
|
if (keysA.length !== keysB.length) { |
|
return false; |
|
} |
|
|
|
const bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB); |
|
|
|
// Test for A's keys different from B. |
|
for (let idx = 0; idx < keysA.length; idx++) { |
|
const key = keysA[idx]; |
|
|
|
if (!bHasOwnProperty(key)) { |
|
return false; |
|
} |
|
|
|
const valueA = objA[key]; |
|
const valueB = objB[key]; |
|
|
|
ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0; |
|
|
|
if (ret === false || (ret === void 0 && valueA !== valueB)) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
|
|
export default function (value: any, other: any) { |
|
return shallowEqual(toRaw(value), toRaw(other)); |
|
}
|
|
|