mock平台

lib.js 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. const _ = require('underscore');
  2. function isObj(object) {
  3. return (
  4. object &&
  5. typeof object == 'object' &&
  6. Object.prototype.toString.call(object).toLowerCase() == '[object object]'
  7. );
  8. }
  9. function isArray(object) {
  10. return object && typeof object == 'object' && object.constructor == Array;
  11. }
  12. function getLength(object) {
  13. return Object.keys(object).length;
  14. }
  15. function Compare(objA, objB) {
  16. if (!isObj(objA) && !isObj(objB)) {
  17. if (isArray(objA) && isArray(objB)) {
  18. return CompareArray(objA, objB, true);
  19. }
  20. return objA == objB;
  21. }
  22. if (!isObj(objA) || !isObj(objB)) return false;
  23. if (getLength(objA) != getLength(objB)) return false;
  24. return CompareObj(objA, objB, true);
  25. }
  26. function CompareArray(objA, objB, flag) {
  27. if (objA.length != objB.length) return false;
  28. for (let i in objB) {
  29. if (!Compare(objA[i], objB[i])) {
  30. flag = false;
  31. break;
  32. }
  33. }
  34. return flag;
  35. }
  36. function CompareObj(objA, objB, flag) {
  37. for (var key in objA) {
  38. if (!flag) break;
  39. if (!objB.hasOwnProperty(key)) {
  40. flag = false;
  41. break;
  42. }
  43. if (!isArray(objA[key])) {
  44. if (objB[key] != objA[key]) {
  45. flag = false;
  46. break;
  47. }
  48. } else {
  49. if (!isArray(objB[key])) {
  50. flag = false;
  51. break;
  52. }
  53. var oA = objA[key],
  54. oB = objB[key];
  55. if (oA.length != oB.length) {
  56. flag = false;
  57. break;
  58. }
  59. for (var k in oA) {
  60. if (!flag) break;
  61. flag = CompareObj(oA[k], oB[k], flag);
  62. }
  63. }
  64. }
  65. return flag;
  66. }
  67. exports.jsonEqual = Compare;
  68. exports.isDeepMatch = function(obj, properties) {
  69. if (!properties || typeof properties !== 'object' || Object.keys(properties).length === 0) {
  70. return true;
  71. }
  72. if (!obj || typeof obj !== 'object' || Object.keys(obj).length === 0) {
  73. return false;
  74. }
  75. let match = true;
  76. for (var i in properties) {
  77. if (!Compare(obj[i], properties[i])) {
  78. match = false;
  79. break;
  80. }
  81. }
  82. return match;
  83. };