countDistinct.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /**
  2. * Copyright (c) 2013-present, Facebook, Inc.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. *
  7. *
  8. */
  9. 'use strict';
  10. var Set = require('./Set');
  11. var emptyFunction = require('./emptyFunction');
  12. /**
  13. * Returns the count of distinct elements selected from an array.
  14. */
  15. function countDistinct(iter, selector) {
  16. selector = selector || emptyFunction.thatReturnsArgument;
  17. var set = new Set();
  18. var _iteratorNormalCompletion = true;
  19. var _didIteratorError = false;
  20. var _iteratorError = undefined;
  21. try {
  22. for (var _iterator = iter[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  23. var val = _step.value;
  24. set.add(selector(val));
  25. }
  26. } catch (err) {
  27. _didIteratorError = true;
  28. _iteratorError = err;
  29. } finally {
  30. try {
  31. if (!_iteratorNormalCompletion && _iterator['return']) {
  32. _iterator['return']();
  33. }
  34. } finally {
  35. if (_didIteratorError) {
  36. throw _iteratorError;
  37. }
  38. }
  39. }
  40. return set.size;
  41. }
  42. module.exports = countDistinct;