array.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { pullAll as setPullAll } from './set';
  2. /**
  3. * arrayA remove arrayB
  4. * @param {array} arrayA
  5. * @param {array} arrayB
  6. * @returns {array} new array
  7. *
  8. * const arrayA = ['a', 'b', 'c', 'a', 'b', 'c'];
  9. *
  10. * const result = pullAll(arrayA, ['a', 'c'])
  11. * console.log(result);
  12. * => ['b', 'b']
  13. */
  14. export function pullAll(arrayA: any[], arrayB: any[]) {
  15. if (arrayA !== null && arrayA.length && arrayB !== null && arrayB.length) {
  16. const setA = new Set(arrayA);
  17. const setB = new Set(arrayB);
  18. const resultSet = setPullAll(setA, setB);
  19. return Array.from(resultSet);
  20. }
  21. return arrayA;
  22. }
  23. type CompareFn<T> = (a: T, b: T) => number;
  24. /**
  25. * Adapt the descending order
  26. * @param {Function} fn
  27. * @param {String} order
  28. * @returns
  29. */
  30. export function withOrderSort<T = any>(fn: CompareFn<T>, order = 'ascend'): CompareFn<T> {
  31. switch (order) {
  32. case 'descend':
  33. return (
  34. (a: any, b: any) => {
  35. const result = Number(fn(a, b));
  36. return result !== 0 ? -result : result;
  37. }
  38. );
  39. case 'ascend':
  40. default:
  41. return fn;
  42. }
  43. }