baseUtils.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. export { remove, isEqual, isEmptyObject, getUrlParam, hashcode };