IterableHelpers.js 993 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. /**
  7. * @template T
  8. * @param {Iterable<T>} set a set
  9. * @returns {T | undefined} last item
  10. */
  11. const last = (set) => {
  12. /** @type {T | undefined} */
  13. let last;
  14. for (const item of set) last = item;
  15. return last;
  16. };
  17. /**
  18. * @template T
  19. * @param {Iterable<T>} iterable iterable
  20. * @param {(value: T) => boolean | null | undefined} filter predicate
  21. * @returns {boolean} true, if some items match the filter predicate
  22. */
  23. const someInIterable = (iterable, filter) => {
  24. for (const item of iterable) {
  25. if (filter(item)) return true;
  26. }
  27. return false;
  28. };
  29. /**
  30. * @template T
  31. * @param {Iterable<T>} iterable an iterable
  32. * @returns {number} count of items
  33. */
  34. const countIterable = (iterable) => {
  35. let i = 0;
  36. for (const _ of iterable) i++;
  37. return i;
  38. };
  39. module.exports.countIterable = countIterable;
  40. module.exports.last = last;
  41. module.exports.someInIterable = someInIterable;