From 1d297350cc5cca8c233f5d4b1220a5aff5ecafbc Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Wed, 27 Sep 2023 09:03:40 +0800 Subject: [PATCH] =?UTF-8?q?Fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=96=B9=E6=B3=95getType=E8=BF=94=E5=9B=9E=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/utils/index.js | 40 +++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/simple-mind-map/src/utils/index.js b/simple-mind-map/src/utils/index.js index c0918ad0..28b90333 100644 --- a/simple-mind-map/src/utils/index.js +++ b/simple-mind-map/src/utils/index.js @@ -464,7 +464,7 @@ export const removeHTMLEntities = str => { // 获取一个数据的类型 export const getType = data => { - return Object.prototype.toString.call(data).slice(7, -1) + return Object.prototype.toString.call(data).slice(8, -1) } // 判断一个数据是否是null和undefined和空字符串 @@ -823,3 +823,41 @@ export const htmlEscape = str => { }) return str } + +// 判断两个对象是否相同,只处理对象或数组 +export const isSameObject = (a, b) => { + const type = getType(a) + // a、b类型不一致,那么肯定不相同 + if (type !== getType(b)) return false + // 如果都是对象 + if (type === 'Object') { + const keysa = Object.keys(a) + const keysb = Object.keys(b) + // 对象字段数量不一样,肯定不相同 + if (keysa.length !== keysb.length) return false + // 字段数量一样,那么需要遍历字段进行判断 + for (let i = 0; i < keysa.length; i++) { + const key = keysa[i] + // b没有a的一个字段,那么肯定不相同 + if (!keysb.includes(key)) return false + // 字段名称一样,那么需要递归判断它们的值 + return isSameObject(a[key], b[key]) + } + } else if (type === 'Array') { + // 如果都是数组 + // 数组长度不一样,肯定不相同 + if (a.length !== b.length) return false + // 长度一样,那么需要遍历进行判断 + for (let i = 0; i < a.length; i++) { + const itema = a[i] + const itemb = b[i] + const typea = getType(itema) + const typeb = getType(itemb) + if (typea !== typeb) return false + return isSameObject(itema, itemb) + } + } else { + // 其他类型,直接全等判断 + return a === b + } +}