Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const log = (...v) => {
- console.log(...v);
- return v;
- };
- const _ = {};
- _.each = (list, iteratee) => {
- for (let i in list) iteratee(list[i]);
- };
- _.map = (list, iteratee) => {
- // if (list.length)
- // return _.reduce(list, (prev, v) => _.concat(prev, iteratee(v)), []);
- const newList = [];
- for (let i in list) newList.push(iteratee(list[i]));
- return newList;
- };
- _.first = list => list[0];
- _.reduce = (list, predicate, memo) => {
- let i = 0;
- let acc = memo !== undefined ? memo : list[i++];
- const len = list.length;
- for (; i < len; i++) acc = predicate(acc, list[i]);
- return acc;
- };
- _.append = (list, item) => {
- list.push(item);
- return list;
- };
- _.concat = (list, item) => list.concat(item);
- _.filter = (list, predicate) =>
- _.reduce(list, (prev, v) => (predicate(v) ? _.concat(prev, v) : prev), []);
- _.go = (initValue, ...funcs) =>
- _.reduce(funcs, (prev, func) => func(prev), initValue);
- _.pipe = (...funcs) => (...args) =>
- _.reduce(
- funcs,
- (prev, func) => (prev.length ? func(...prev) : func(prev)),
- args
- );
- const products = [
- {
- is_selected: true, // <--- 장바구니에서 체크 박스 선택
- name: "반팔티",
- price: 10000, // <--- 기본 가격
- sizes: [
- // <---- 장바구니에 담은 동일 상품의 사이즈 별 수량과 가격
- { name: "L", quantity: 2, price: 0 },
- { name: "XL", quantity: 3, price: 0 },
- { name: "2XL", quantity: 2, price: 2000 } // <-- 옵션의 추가 가격
- ]
- },
- {
- is_selected: true,
- name: "후드티",
- price: 21000,
- sizes: [
- { name: "L", quantity: 3, price: -1000 },
- { name: "2XL", quantity: 1, price: 2000 }
- ]
- },
- {
- is_selected: false,
- name: "맨투맨",
- price: 16000,
- sizes: [{ name: "L", quantity: 4, price: 0 }]
- }
- ];
- // 1. 모든 제품의 전체 수량 구하기
- log(
- _.reduce(
- products,
- (p, { sizes }) =>
- p + _.reduce(sizes, (prev, { quantity }) => prev + quantity, 0),
- 0
- )
- );
- // 2. 선택된 제품의 전체 수량 구하기
- log(
- _.reduce(
- _.filter(products, ({ is_selected }) => is_selected),
- (p, { sizes }) =>
- p + _.reduce(sizes, (prev, { quantity }) => prev + quantity, 0),
- 0
- )
- );
- // _.each([1, 2, 3], log);
- // _.each({ one: 1, two: 2, three: 3 }, log);
- // log(
- // _.map([1, 2, 3], function(num) {
- // return num * 3;
- // })
- // );
- // // [3, 6, 9]
- // log(
- // _.map({ one: 1, two: 2, three: 3 }, function(num, key) {
- // return num * 3;
- // })
- // );
- // // [3, 6, 9]
- // log(_.map([[1, 2], [3, 4]], _.first));
- // // [1, 3]
- // log(_.filter([1, 2, 3, 4, 5, 6], num => num % 2 == 0));
- // log(
- // _.reduce(
- // [1, 2, 3],
- // function(memo, num) {
- // return memo + num;
- // },
- // 0
- // )
- // );
- // log(
- // _.go(
- // 10, // 첫 번째 함수에서 사용할 인자
- // function(a) {
- // return a * 10;
- // }, // 연속 실행할 함수 1
- // // 100
- // function(a) {
- // return a - 50;
- // }, // 연속 실행할 함수 2
- // // 50
- // function(a) {
- // return a + 10;
- // }
- // )
- // ); // 연속 실행할 함수 3
- // // 60
- // var f1 = _.pipe((a, b) => a + b, a => a * a, a => a * a);
- // log(f1(1, 2)); // 81
Add Comment
Please, Sign In to add comment