is-equal.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. var isObjectLike = require('./type/is-object-like');
  2. var isArrayLike = require('./type/is-array-like');
  3. var isString = require('./type/is-string');
  4. var isEqual = function isEqual(value, other) {
  5. if (value === other) {
  6. return true;
  7. }
  8. if (!value || !other) {
  9. return false;
  10. }
  11. if (isString(value) || isString(other)) {
  12. return false;
  13. }
  14. if (isArrayLike(value) || isArrayLike(other)) {
  15. if (value.length !== other.length) {
  16. return false;
  17. }
  18. var rst = true;
  19. for (var i = 0; i < value.length; i++) {
  20. rst = isEqual(value[i], other[i]);
  21. if (!rst) {
  22. break;
  23. }
  24. }
  25. return rst;
  26. }
  27. if (isObjectLike(value) || isObjectLike(other)) {
  28. var valueKeys = Object.keys(value);
  29. var otherKeys = Object.keys(other);
  30. if (valueKeys.length !== otherKeys.length) {
  31. return false;
  32. }
  33. var _rst = true;
  34. for (var _i = 0; _i < valueKeys.length; _i++) {
  35. _rst = isEqual(value[valueKeys[_i]], other[valueKeys[_i]]);
  36. if (!_rst) {
  37. break;
  38. }
  39. }
  40. return _rst;
  41. }
  42. return false;
  43. };
  44. module.exports = isEqual;