Advertisement
Guest User

Untitled

a guest
Aug 20th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. class Parcel {
  2. constructor(dimensions) {
  3. this.dimensions = dimensions;
  4. this.parcelSize = Parcel.returnParcelSize(dimensions);
  5. this.price = Parcel.calculatePrice(dimensions);
  6. }
  7.  
  8. static get prices() {
  9. return {
  10. small: 3,
  11. medium: 5,
  12. large: 15,
  13. extraLarge: 30,
  14. };
  15. }
  16.  
  17. static get parcelInfo() {
  18. return {
  19. small: { maxDimension: 10, price: 3 },
  20. medium: { maxDimension: 50, price: 8 },
  21. large: { maxDimension: 100, price: 15 },
  22. extraLarge: { maxDimension: null, price: 25 },
  23. };
  24. }
  25.  
  26. static calculatePrice(dimensions) {
  27. // [1, 2, 3]
  28. // small / medium / large
  29. const parcelSize = Parcel.returnParcelSize(dimensions);
  30. const { price } = Parcel.parcelInfo[parcelSize];
  31. return price;
  32. }
  33.  
  34. static isParcelRightSize(dimensions, maxDimension) {
  35. const biggestDimension = dimensions.slice().sort((a, b) => a < b)[0];
  36. return biggestDimension < maxDimension;
  37. }
  38.  
  39. static returnParcelSize(dimensions) {
  40. let result;
  41. switch (true) {
  42. case Parcel.isParcelRightSize(
  43. dimensions,
  44. Parcel.parcelInfo.small.maxDimension
  45. ):
  46. result = 'small';
  47. break;
  48. case Parcel.isParcelRightSize(
  49. dimensions,
  50. Parcel.parcelInfo.medium.maxDimension
  51. ):
  52. result = 'medium';
  53. break;
  54. case Parcel.isParcelRightSize(
  55. dimensions,
  56. Parcel.parcelInfo.large.maxDimension
  57. ):
  58. result = 'large';
  59. break;
  60. default:
  61. result = 'extraLarge';
  62. }
  63. return result;
  64. }
  65. }
  66.  
  67. // testing
  68. const parcel = new Parcel([11, 2, 3]);
  69. console.log(parcel.dimensions);
  70. console.log(parcel.parcelSize);
  71. console.log(parcel.price);
  72.  
  73. /////////////////////////////////////////////////////////////////
  74.  
  75. const { Parcel } = require('./test');
  76.  
  77. class Order {
  78. constructor(order, parcel, speedyStatus = false) {
  79. this.order = order;
  80. this.speedyStatus = speedyStatus;
  81. this.Parcel = parcel;
  82. }
  83.  
  84. createOrder() {
  85. return this.order.map(parcel => new this.Parcel(parcel));
  86. }
  87.  
  88. calculateTotal() {
  89. const arrayOfOrders = this.createOrder();
  90. const total = arrayOfOrders.reduce((sum, parcel) => {
  91. return sum + parcel.price;
  92. }, 0);
  93. return this.speedyStatus ? total * 2 : total;
  94. }
  95.  
  96. returnResult() {
  97. return {
  98. order: this.createOrder(),
  99. totalCost: this.calculateTotal(),
  100. };
  101. }
  102. }
  103.  
  104. const sampleOrder = [[1, 2, 3], [11, 2, 2], [51, 1, 1]];
  105.  
  106. const newOrder = new Order(sampleOrder, Parcel);
  107. console.log('RESULT =>', newOrder.returnResult());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement