Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

obj-tools.js 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /**
  2. * 合并两个对象
  3. *
  4. * @param data 第一个对象
  5. * @param dataExtend 第二个对象,其属性会覆盖第一个对象的同名属性
  6. * @returns 合并后的新对象
  7. */
  8. export function mergeObjet(data, dataExtend) {
  9. let res = {} // 创建合并对象
  10. if (data != null && data != undefined) {
  11. for (let key in data) {
  12. res[key] = data[key]
  13. }
  14. }
  15. // 覆盖前值对象
  16. if (dataExtend != null && dataExtend != undefined) {
  17. for (let key in dataExtend) {
  18. // 忽略空值和NULL
  19. if (
  20. dataExtend[key] != undefined &&
  21. dataExtend[key] != null &&
  22. dataExtend[key] != ''
  23. )
  24. res[key] = dataExtend[key]
  25. }
  26. }
  27. return res
  28. }
  29. /**
  30. * 格式化银行账号显示格式
  31. *
  32. * @param bankNumber 银行账号字符串
  33. * @returns 格式化后的银行账号字符串,每四位数字用空格隔开
  34. */
  35. export function formatCardNumber(bankNumber) {
  36. return bankNumber
  37. .replace(/\s/g, '')
  38. .replace(/[^\d]/g, '')
  39. .replace(/(\d{4})(?=\d)/g, '$1 ')
  40. }
  41. /**
  42. * 格式化用户名
  43. *
  44. * @param name 用户名
  45. * @param replaceStr 替换字符串,默认为 '*'
  46. * @returns 格式化后的用户名
  47. */
  48. export function formatUserName(name, replaceStr = '*') {
  49. let newName = name
  50. if (name.length === 2) {
  51. newName = name[0] + replaceStr
  52. } else if (name.length > 2) {
  53. var char = ''
  54. for (var i = 0, len = name.length - 2; i < len; i++) {
  55. char += replaceStr
  56. }
  57. newName = name[0] + char + name[name.length - 1]
  58. }
  59. return newName
  60. }
  61. export function formatPhone(phone) {
  62. if (phone.length !== 11) {
  63. return phone
  64. }
  65. // 提取前6位和后4位
  66. const prefix = phone.slice(0, 3)
  67. const suffix = phone.slice(-4)
  68. // 生成中间部分的星号
  69. const maskedMiddle = '****'
  70. // 拼接成新的字符串
  71. return prefix + maskedMiddle + suffix
  72. }
  73. export function maskIdCard(idCard) {
  74. if (idCard.length !== 18) {
  75. return idCard
  76. }
  77. // 提取前6位和后4位
  78. const prefix = idCard.slice(0, 6)
  79. const suffix = idCard.slice(-4)
  80. // 生成中间部分的星号
  81. const maskedMiddle = '*****'
  82. console.log(prefix, maskedMiddle, suffix)
  83. // 拼接成新的字符串
  84. return prefix + maskedMiddle + suffix
  85. }
  86. export function jsonToString(info) {
  87. if (info == null) {
  88. return ''
  89. }
  90. return JSON.stringify(info)
  91. }
  92. export function stringToJson(info) {
  93. if (info == null) {
  94. return {}
  95. }
  96. return JSON.parse(info)
  97. }
  98. export const anyIsEqual = (
  99. a1,
  100. a2,
  101. ignoreArrayPosition = false
  102. ) => {
  103. if (isNil(a1) || isNil(a2)) {
  104. // 首先判断要比较的两个参数是否为空
  105. return a1 === a2 // 只要其中一个为空的话,直接返回它们是否相等就可以了
  106. } else {
  107. if (a1.constructor === a2.constructor) {
  108. // 再判断他们的类型是否相等,类型不相等的话,其值也无须判断了
  109. if (a1.constructor === Array) {
  110. return arrayIsEqual(a1, a2, ignoreArrayPosition) // 如果是数组,就用数组方式判断是否相等
  111. } else if (a1.constructor === Object) {
  112. return objectIsEqual(a1, a2) // 如果是对象,就用对象方式判断是否相等
  113. } else {
  114. return a1 === a2 // 其余的直接判断是否相等
  115. }
  116. } else {
  117. return false
  118. }
  119. }
  120. }
  121. export const isNil = (v) => {
  122. return typeof v === 'undefined' || v === null
  123. }
  124. export const arrayIsEqual = (
  125. a1,
  126. a2,
  127. ignoreArrayPosition = false
  128. ) => {
  129. if (a1.length !== a2.length) {
  130. return false // 判断数组大小是否一致,不一致的话其内容也就不需要判断了
  131. } else {
  132. if (!ignoreArrayPosition) {
  133. return a1.every((v, i) => anyIsEqual(v, a2[i])) // 如果不忽略数组位置的话,也就是说每个数组元素的位置一样,并且其值也一样才判断为相等
  134. } else {
  135. return a1.every(
  136. (v) =>
  137. a2.findIndex((v2) => anyIsEqual(v2, v)) >= 0 &&
  138. a2.filter((v2) => anyIsEqual(v2, v)).length ===
  139. a1.filter((v1) => anyIsEqual(v1, v)).length
  140. ) // 忽略数据位置的话,那么只要其中一个数组每个元素都可以在另一个数组可以找到,并且每个元素在两个数组的数量是相等的话,那么就可以判定为相等
  141. }
  142. }
  143. }
  144. export const objectIsEqual = (
  145. o1,
  146. o2
  147. ) => {
  148. if (Object.keys(o1).length !== Object.keys(o2).length) {
  149. return false // 首先对象属性个数要一致,不一致的话其内容也就不需要判断了
  150. } else {
  151. return Object.keys(o1).every((k) => {
  152. if (Object.keys(o2).includes(k)) {
  153. return anyIsEqual(o1[k], o2[k])
  154. } else {
  155. return false
  156. } // 只要其中一个对象的属性名在另一个对象存在,就判断其值是否相等就可以了
  157. })
  158. }
  159. }