You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.3 KiB

4 years ago
  1. var baseIteratee = require('./_baseIteratee'),
  2. baseWhile = require('./_baseWhile');
  3. /**
  4. * Creates a slice of `array` with elements taken from the beginning. Elements
  5. * are taken until `predicate` returns falsey. The predicate is invoked with
  6. * three arguments: (value, index, array).
  7. *
  8. * @static
  9. * @memberOf _
  10. * @since 3.0.0
  11. * @category Array
  12. * @param {Array} array The array to query.
  13. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  14. * @returns {Array} Returns the slice of `array`.
  15. * @example
  16. *
  17. * var users = [
  18. * { 'user': 'barney', 'active': false },
  19. * { 'user': 'fred', 'active': false },
  20. * { 'user': 'pebbles', 'active': true }
  21. * ];
  22. *
  23. * _.takeWhile(users, function(o) { return !o.active; });
  24. * // => objects for ['barney', 'fred']
  25. *
  26. * // The `_.matches` iteratee shorthand.
  27. * _.takeWhile(users, { 'user': 'barney', 'active': false });
  28. * // => objects for ['barney']
  29. *
  30. * // The `_.matchesProperty` iteratee shorthand.
  31. * _.takeWhile(users, ['active', false]);
  32. * // => objects for ['barney', 'fred']
  33. *
  34. * // The `_.property` iteratee shorthand.
  35. * _.takeWhile(users, 'active');
  36. * // => []
  37. */
  38. function takeWhile(array, predicate) {
  39. return (array && array.length)
  40. ? baseWhile(array, baseIteratee(predicate, 3))
  41. : [];
  42. }
  43. module.exports = takeWhile;