Guest User

Untitled

a guest
Jan 22nd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 KB | None | 0 0
  1. const log = (...v) => {
  2. console.log(...v);
  3. return v;
  4. };
  5.  
  6. const _ = {};
  7.  
  8. _.each = (list, iteratee) => {
  9. for (let i in list) iteratee(list[i]);
  10. };
  11.  
  12. _.map = (list, iteratee) => {
  13. // if (list.length)
  14. // return _.reduce(list, (prev, v) => _.concat(prev, iteratee(v)), []);
  15.  
  16. const newList = [];
  17.  
  18. for (let i in list) newList.push(iteratee(list[i]));
  19. return newList;
  20. };
  21.  
  22. _.first = list => list[0];
  23.  
  24. _.reduce = (list, predicate, memo) => {
  25. let i = 0;
  26. let acc = memo !== undefined ? memo : list[i++];
  27. const len = list.length;
  28.  
  29. for (; i < len; i++) acc = predicate(acc, list[i]);
  30. return acc;
  31. };
  32.  
  33. _.append = (list, item) => {
  34. list.push(item);
  35. return list;
  36. };
  37.  
  38. _.concat = (list, item) => list.concat(item);
  39.  
  40. _.filter = (list, predicate) =>
  41. _.reduce(list, (prev, v) => (predicate(v) ? _.concat(prev, v) : prev), []);
  42.  
  43. _.go = (initValue, ...funcs) =>
  44. _.reduce(funcs, (prev, func) => func(prev), initValue);
  45.  
  46. _.pipe = (...funcs) => (...args) =>
  47. _.reduce(
  48. funcs,
  49. (prev, func) => (prev.length ? func(...prev) : func(prev)),
  50. args
  51. );
  52.  
  53. const products = [
  54. {
  55. is_selected: true, // <--- 장바구니에서 체크 박스 선택
  56. name: "반팔티",
  57. price: 10000, // <--- 기본 가격
  58. sizes: [
  59. // <---- 장바구니에 담은 동일 상품의 사이즈 별 수량과 가격
  60. { name: "L", quantity: 2, price: 0 },
  61. { name: "XL", quantity: 3, price: 0 },
  62. { name: "2XL", quantity: 2, price: 2000 } // <-- 옵션의 추가 가격
  63. ]
  64. },
  65. {
  66. is_selected: true,
  67. name: "후드티",
  68. price: 21000,
  69. sizes: [
  70. { name: "L", quantity: 3, price: -1000 },
  71. { name: "2XL", quantity: 1, price: 2000 }
  72. ]
  73. },
  74. {
  75. is_selected: false,
  76. name: "맨투맨",
  77. price: 16000,
  78. sizes: [{ name: "L", quantity: 4, price: 0 }]
  79. }
  80. ];
  81.  
  82. // 1. 모든 제품의 전체 수량 구하기
  83. log(
  84. _.reduce(
  85. products,
  86. (p, { sizes }) =>
  87. p + _.reduce(sizes, (prev, { quantity }) => prev + quantity, 0),
  88. 0
  89. )
  90. );
  91. // 2. 선택된 제품의 전체 수량 구하기
  92. log(
  93. _.reduce(
  94. _.filter(products, ({ is_selected }) => is_selected),
  95. (p, { sizes }) =>
  96. p + _.reduce(sizes, (prev, { quantity }) => prev + quantity, 0),
  97. 0
  98. )
  99. );
  100.  
  101. // _.each([1, 2, 3], log);
  102. // _.each({ one: 1, two: 2, three: 3 }, log);
  103.  
  104. // log(
  105. // _.map([1, 2, 3], function(num) {
  106. // return num * 3;
  107. // })
  108. // );
  109. // // [3, 6, 9]
  110. // log(
  111. // _.map({ one: 1, two: 2, three: 3 }, function(num, key) {
  112. // return num * 3;
  113. // })
  114. // );
  115. // // [3, 6, 9]
  116. // log(_.map([[1, 2], [3, 4]], _.first));
  117. // // [1, 3]
  118.  
  119. // log(_.filter([1, 2, 3, 4, 5, 6], num => num % 2 == 0));
  120.  
  121. // log(
  122. // _.reduce(
  123. // [1, 2, 3],
  124. // function(memo, num) {
  125. // return memo + num;
  126. // },
  127. // 0
  128. // )
  129. // );
  130.  
  131. // log(
  132. // _.go(
  133. // 10, // 첫 번째 함수에서 사용할 인자
  134. // function(a) {
  135. // return a * 10;
  136. // }, // 연속 실행할 함수 1
  137. // // 100
  138. // function(a) {
  139. // return a - 50;
  140. // }, // 연속 실행할 함수 2
  141. // // 50
  142. // function(a) {
  143. // return a + 10;
  144. // }
  145. // )
  146. // ); // 연속 실행할 함수 3
  147. // // 60
  148.  
  149. // var f1 = _.pipe((a, b) => a + b, a => a * a, a => a * a);
  150. // log(f1(1, 2)); // 81
Add Comment
Please, Sign In to add comment