IterableHelpers.js 1.1 KB

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