PseudoMap.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. var Class = require('./Class');
  2. var root = require('./root');
  3. var defineProp = require('./defineProp');
  4. var keys = require('./keys');
  5. var each = require('./each');
  6. var isArr = require('./isArr');
  7. var isUndef = require('./isUndef');
  8. if (root.Map && !false) {
  9. exports = root.Map;
  10. } else {
  11. exports = Class({
  12. initialize: function PseudoMap(data) {
  13. this.clear();
  14. var self = this;
  15. defineProp(this, 'size', {
  16. get: function() {
  17. return keys(self._data).length;
  18. },
  19. set: function() {},
  20. enumerable: true,
  21. configurable: true
  22. });
  23. if (data instanceof exports) {
  24. data.forEach(function(val, key) {
  25. this.set(key, val);
  26. }, this);
  27. } else if (isArr(data)) {
  28. each(
  29. data,
  30. function(val) {
  31. this.set(val[0], val[1]);
  32. },
  33. this
  34. );
  35. }
  36. },
  37. forEach: function(fn, ctx) {
  38. each(
  39. this._data,
  40. function(val, key) {
  41. fn.call(this, val, key);
  42. },
  43. ctx
  44. );
  45. },
  46. has: function(key) {
  47. return !isUndef(this._data[key]);
  48. },
  49. get: function(key) {
  50. return this._data[key];
  51. },
  52. set: function(key, val) {
  53. this._data[key] = val;
  54. },
  55. delete: function(key) {
  56. delete this._data[key];
  57. },
  58. clear: function() {
  59. this._data = {};
  60. }
  61. });
  62. }
  63. module.exports = exports;