takeRightWhile.js 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. var baseIteratee = require('./_baseIteratee'),
  2. baseWhile = require('./_baseWhile');
  3. /**
  4. * Creates a slice of `array` with elements taken from the end. Elements are
  5. * 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': true },
  19. * { 'user': 'fred', 'active': false },
  20. * { 'user': 'pebbles', 'active': false }
  21. * ];
  22. *
  23. * _.takeRightWhile(users, function(o) { return !o.active; });
  24. * // => objects for ['fred', 'pebbles']
  25. *
  26. * // The `_.matches` iteratee shorthand.
  27. * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
  28. * // => objects for ['pebbles']
  29. *
  30. * // The `_.matchesProperty` iteratee shorthand.
  31. * _.takeRightWhile(users, ['active', false]);
  32. * // => objects for ['fred', 'pebbles']
  33. *
  34. * // The `_.property` iteratee shorthand.
  35. * _.takeRightWhile(users, 'active');
  36. * // => []
  37. */
  38. function takeRightWhile(array, predicate) {
  39. return (array && array.length)
  40. ? baseWhile(array, baseIteratee(predicate, 3), false, true)
  41. : [];
  42. }
  43. module.exports = takeRightWhile;