optimize.js 1015 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. 'use strict';
  2. /**
  3. * optimize try catch
  4. * @param {Function} fn
  5. * @return {Object}
  6. * - {Error} error
  7. * - {Mix} value
  8. */
  9. exports.try = function (fn) {
  10. var res = {
  11. error: undefined,
  12. value: undefined
  13. };
  14. try {
  15. res.value = fn();
  16. } catch (err) {
  17. res.error = err instanceof Error
  18. ? err
  19. : new Error(err);
  20. }
  21. return res;
  22. };
  23. /**
  24. * avoid if (a && a.b && a.b.c)
  25. * @param {Object} obj
  26. * @param {...String} keys
  27. * @return {Object}
  28. */
  29. exports.dig = function (obj) {
  30. if (!obj) {
  31. return;
  32. }
  33. if (arguments.length <= 1) {
  34. return obj;
  35. }
  36. var value = obj[arguments[1]];
  37. for (var i = 2; i < arguments.length; i++) {
  38. if (!value) {
  39. break;
  40. }
  41. value = value[arguments[i]];
  42. }
  43. return value;
  44. };
  45. /**
  46. * optimize arguments to array
  47. * @param {Arguments} args
  48. * @return {Array}
  49. */
  50. exports.argumentsToArray = function (args) {
  51. var res = new Array(args.length);
  52. for (var i = 0; i < args.length; i++) {
  53. res[i] = args[i];
  54. }
  55. return res;
  56. };