baseUtils.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /**
  2. * 删除数组某个值
  3. * @param {*} arr
  4. * @param {*} val
  5. */
  6. function remove(arr, val) {
  7. var index = arr.indexOf(val);
  8. if (index > -1) {
  9. arr.splice(index, 1);
  10. }
  11. return arr;
  12. }
  13. /**
  14. * 判断两个对象是否相等
  15. * @param {*} a
  16. * @param {*} b
  17. */
  18. function isEqual(a,b){
  19. //如果a和b本来就全等
  20. if(a===b){
  21. //判断是否为0和-0
  22. return a !== 0 || 1/a ===1/b;
  23. }
  24. //判断是否为null和undefined
  25. if(a==null||b==null){
  26. return a===b;
  27. }
  28. //接下来判断a和b的数据类型
  29. var classNameA=Object.prototype.toString.call(a),
  30. classNameB=Object.prototype.toString.call(b);
  31. //如果数据类型不相等,则返回false
  32. if(classNameA !== classNameB){
  33. return false;
  34. }
  35. //如果数据类型相等,再根据不同数据类型分别判断
  36. switch(classNameA){
  37. case '[object RegExp]':
  38. case '[object String]':
  39. //进行字符串转换比较
  40. return '' + a ==='' + b;
  41. case '[object Number]':
  42. //进行数字转换比较,判断是否为NaN
  43. if(+a !== +a){
  44. return +b !== +b;
  45. }
  46. //判断是否为0或-0
  47. return +a === 0?1/ +a === 1/b : +a === +b;
  48. case '[object Date]':
  49. case '[object Boolean]':
  50. return +a === +b;
  51. }
  52. //如果是对象类型
  53. if(classNameA == '[object Object]'){
  54. //获取a和b的属性长度
  55. var propsA = Object.getOwnPropertyNames(a),
  56. propsB = Object.getOwnPropertyNames(b);
  57. if(propsA.length != propsB.length){
  58. return false;
  59. }
  60. for(var i=0;i<propsA.length;i++){
  61. var propName=propsA[i];
  62. //如果对应属性对应值不相等,则返回false
  63. //if(a[propName] !== b[propName]){
  64. if(!isEqual(a[propName], b[propName])){
  65. return false;
  66. }
  67. }
  68. return true;
  69. }
  70. //如果是数组类型
  71. if(classNameA == '[object Array]'){
  72. let i = 0;
  73. for(i; i < a.length;i++) {
  74. if(!isEqual(a[i], b[i])) {
  75. return false;
  76. }
  77. }
  78. return true;
  79. }
  80. }
  81. function isEmptyObject(model) {
  82. var isEmpty = true;
  83. for (var prop in model) {
  84. isEmpty = false;
  85. break;
  86. }
  87. return isEmpty;
  88. }
  89. function getUrlParam(name) {
  90. var reg = new RegExp("(^|&)"+name+"=([^&]*)(&|$)");
  91. var r = window.location.search.substr(1).match(reg);
  92. if (r != null) return decodeURI(r[2]);
  93. return null;
  94. }
  95. function hashcode(obj) {
  96. let str = JSON.stringify(obj);
  97. let hash = 0,
  98. i, chr, len;
  99. if (str.length === 0) return hash;
  100. for (i = 0, len = str.length; i < len; i++) {
  101. chr = str.charCodeAt(i);
  102. hash = ((hash << 5) - hash) + chr;
  103. hash |= 0;
  104. }
  105. return hash;
  106. }
  107. function delay(timeout) {
  108. return new Promise(resolve => {
  109. setTimeout(resolve, timeout);
  110. });
  111. }
  112. export { remove, isEqual, isEmptyObject, getUrlParam, hashcode, delay };
  113. Date.prototype.format = function (fmt) {
  114. var o = {
  115. "M+": this.getMonth() + 1, //月份
  116. "d+": this.getDate(), //日
  117. "h+": this.getHours(), //时
  118. "m+": this.getMinutes(), //分
  119. "s+": this.getSeconds(), //秒
  120. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  121. "S": this.getMilliseconds() //毫秒
  122. };
  123. if (/(y+)/.test(fmt))
  124. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  125. for (var k in o)
  126. if (new RegExp("(" + k + ")").test(fmt))
  127. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  128. return fmt;
  129. }
  130. Array.prototype.distinct = function () { 
  131. var arr = this,
  132.   i,   obj = {},
  133.   result = [],
  134.   len = arr.length; 
  135. for (i = 0; i < arr.length; i++) {  
  136. if (!obj[arr[i]]) { //如果能查找到,证明数组元素重复了
  137.    
  138. obj[arr[i]] = 1;   
  139. result.push(arr[i]);  
  140. return result;
  141. };