collection.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.get = get;
  6. exports.isCollection = isCollection;
  7. exports.set = set;
  8. var _detector = require("./detector.js");
  9. /**
  10. * collection types
  11. */
  12. const collectionTypeSet = new Set(['Arguments', 'Array', 'Map', 'Object', 'Set']);
  13. /**
  14. * get value from collection
  15. *
  16. * @param {Array|Object|Map|Set} collection
  17. * @param {string|number|symbol} key
  18. * @param {string} [type=null]
  19. * @return {*}
  20. */
  21. function get(collection, key, type = null) {
  22. const valueType = type || (0, _detector.detectType)(collection);
  23. switch (valueType) {
  24. case 'Arguments':
  25. case 'Array':
  26. case 'Object':
  27. return collection[key];
  28. case 'Map':
  29. return collection.get(key);
  30. case 'Set':
  31. // NOTE: Set.prototype.keys is alias of Set.prototype.values
  32. // it means key is equals value
  33. return key;
  34. default:
  35. }
  36. }
  37. /**
  38. * check to type string is collection
  39. *
  40. * @param {string} type
  41. */
  42. function isCollection(type) {
  43. return collectionTypeSet.has(type);
  44. }
  45. /**
  46. * set value to collection
  47. *
  48. * @param {Array|Object|Map|Set} collection
  49. * @param {string|number|symbol} key
  50. * @param {*} value
  51. * @param {string} [type=null]
  52. * @return {Array|Object|Map|Set}
  53. */
  54. function set(collection, key, value, type = null) {
  55. const valueType = type || (0, _detector.detectType)(collection);
  56. switch (valueType) {
  57. case 'Arguments':
  58. case 'Array':
  59. case 'Object':
  60. collection[key] = value;
  61. break;
  62. case 'Map':
  63. collection.set(key, value);
  64. break;
  65. case 'Set':
  66. collection.add(value);
  67. break;
  68. default:
  69. }
  70. return collection;
  71. }
  72. //# sourceMappingURL=collection.js.map