pull.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. var baseIndexOf = require('../internal/baseIndexOf');
  2. /** Used for native method references. */
  3. var arrayProto = Array.prototype;
  4. /** Native method references. */
  5. var splice = arrayProto.splice;
  6. /**
  7. * Removes all provided values from `array` using
  8. * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
  9. * for equality comparisons.
  10. *
  11. * **Note:** Unlike `_.without`, this method mutates `array`.
  12. *
  13. * @static
  14. * @memberOf _
  15. * @category Array
  16. * @param {Array} array The array to modify.
  17. * @param {...*} [values] The values to remove.
  18. * @returns {Array} Returns `array`.
  19. * @example
  20. *
  21. * var array = [1, 2, 3, 1, 2, 3];
  22. *
  23. * _.pull(array, 2, 3);
  24. * console.log(array);
  25. * // => [1, 1]
  26. */
  27. function pull() {
  28. var args = arguments,
  29. array = args[0];
  30. if (!(array && array.length)) {
  31. return array;
  32. }
  33. var index = 0,
  34. indexOf = baseIndexOf,
  35. length = args.length;
  36. while (++index < length) {
  37. var fromIndex = 0,
  38. value = args[index];
  39. while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {
  40. splice.call(array, fromIndex, 1);
  41. }
  42. }
  43. return array;
  44. }
  45. module.exports = pull;