index.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // import _ from 'lodash'
  2. import upperFirst from 'lodash/upperFirst'
  3. export const randomString = e => {
  4. e = e || 32
  5. const t = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'
  6. const a = t.length
  7. let n = ''
  8. for (let i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a))
  9. return n
  10. }
  11. export const resolveComponentType = type => {
  12. return `${upperFirst(type)}`
  13. }
  14. export function deepCompare (obj1, obj2, excludeKeys = []) {
  15. // eslint-disable-next-line eqeqeq
  16. if (obj1 == obj2) {
  17. return false
  18. }
  19. // 如果两个对象中的一个是基本类型,则它们不相等
  20. if (typeof obj1 !== 'object' || obj1 === null ||
  21. typeof obj2 !== 'object' || obj2 === null) {
  22. return true
  23. }
  24. // 如果两个对象的类型不相同,则它们不相等
  25. if (obj1.constructor !== obj2.constructor) {
  26. return true
  27. }
  28. // 递归地比较对象的属性
  29. for (const prop in obj1) {
  30. // 如果prop是要排除的key,则跳过
  31. if (excludeKeys.includes(prop)) {
  32. continue
  33. }
  34. if (obj1.hasOwnProperty(prop)) {
  35. if (!obj2.hasOwnProperty(prop)) {
  36. return true
  37. }
  38. if (deepCompare(obj1[prop], obj2[prop])) {
  39. return true
  40. }
  41. }
  42. }
  43. // 检查 obj2 中是否有 obj1 没有的属性
  44. for (const prop in obj2) {
  45. if (obj2.hasOwnProperty(prop) && !obj1.hasOwnProperty(prop)) {
  46. return true
  47. }
  48. }
  49. // 如果上面的检查都通过,则对象是相等的
  50. return false
  51. }