header-img
Info :
728x90

1. each

// [ for-each ]

//  1. collection(๋ฐฐ์—ด ํ˜น์€ ๊ฐ์ฒด)๊ณผ ํ•จ์ˆ˜ iteratee(๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—…)๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์•„ (iteratee๋Š” ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜์ด๋ฏ€๋กœ callback ํ•จ์ˆ˜)
//  2. collection์˜ ๋ฐ์ดํ„ฐ(element ๋˜๋Š” property)๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ
//  3. iteratee์— ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


_.each = function (collection, iteratee) {
  // TODO: ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  if (Array.isArray(collection)) {
    for (let idx = 0; idx < collection.length; idx++) {
      iteratee(collection[idx], idx, collection);
    }
  } else {
    for (let key in collection) {
      iteratee(collection[key], key, collection);
    }
  }
};

// [1,2,3,4]
// 1 2 3 4


2. reduce

// ํ•˜๋‚˜๋กœ ์‘์ถ• ์‹œ์ผœ์ฃผ๋Š” ํ•จ์ˆ˜ ?
// ์˜ˆ๋ฅผ ๋“ค๋ฉด sum(ํ•ฉ๊ณ„) ๋งŒ๋“ค ๋•Œ... ์ž˜ ์‚ฌ์šฉ๋œ๋‹ค....

//  1. ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์š”์†Œ์— iteratee ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๊ณ ,
//  2. ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ณ„์†ํ•ด์„œ ๋ˆ„์ (accumulate)ํ•ฉ๋‹ˆ๋‹ค.
//  3. ์ตœ์ข…์ ์œผ๋กœ ๋ˆ„์ ๋œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
// ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฐ์—ด [1, 2, 3, 4]๋ฅผ ์ „๋ถ€ ๋”ํ•ด์„œ 10์ด๋ผ๋Š” ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
// ๊ฐ ์š”์†Œ๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๋งˆ๋‹ค ๋ˆ„์ ๋˜๋Š” ๊ฐ’์€ ์ฐจ๋ก€๋Œ€๋กœ 1, 1+2, 1+2+3, 1+2+3+4 ์ž…๋‹ˆ๋‹ค.
// ์ด์ฒ˜๋Ÿผ _.reduce๋Š” ๋ฐฐ์—ด์ด๋ผ๋Š” ๋‹ค์ˆ˜์˜ ์ •๋ณด๊ฐ€ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์ถ•์†Œ(์‘์ถ•, ํ™˜์›, reduction)๋˜๊ธฐ ๋•Œ๋ฌธ์— reduce๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™๊ฒŒ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


* input ๊ฐ’์ด [1,2,3,4] , ์ดˆ๊ธฐ๊ฐ’ 0 .

_.reduce = function (arr, iteratee, initVal) {
  // TODO: ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  let accumulator = initVal;

  _.each(arr, function (item, idx, src) {
    // initVal์ด ์—†๊ณ  ์ธ๋ฑ์Šค๊ฐ€ 0๋ฒˆ์งธ์ด๋ฉด 
    // ์ดˆ๊ธฐ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค
    if (initVal === undefined && idx === 0) {
      accumulator = item;
    } else {
      accumulator = iteratee(accumulator, item, idx, src);
    }
  });

  return accumulator;
};

 



1. filter
// array ์—์„œ ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’? ๋งŒ ๊ฐ€์ง€๊ณ  ์˜ค๋ ค๊ณ  ์“ฐ๋Š” ... ํ•จ์ˆ˜(๊ธฐ๋Šฅ)

// _.filter๋Š” ์ง์ˆ˜ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋‹ด์€ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
// ์ง์ˆ˜ํŒ๋ณ„(element)์˜ ๊ฒฐ๊ณผ(return ๊ฐ’)๊ฐ€ truthy์ผ ๊ฒฝ์šฐ, ํ†ต๊ณผ์ž…๋‹ˆ๋‹ค.
-- ํ†ต๊ณผ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค...

?

// ๋ฐฐ์—ด ์š”์†Œ ํ•œ๊ฐœ์”ฉ ๋ถˆ๋Ÿฌ์˜ค๋Š” function ํ•จ์ˆ˜๋‹ค.

_.each = function (collection, iteratee) {
  // TODO: ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  if (Array.isArray(collection)) {
    for (let i = 0; i < collection.length; i++) {
      iteratee(collection[i], i, collection);
    }
  } else {
    for (let el in collection) {
      iteratee(collection[el], el, collection)
    }
  }
};

// ์ด each ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์œ„์—์„œ ์„ค๋ช…ํ•œ filter ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.


// arr = ๋ฐฐ์—ด
// ์ง์ˆ˜ํŒ๋ณ„ = ์กฐ๊ฑด ? ๊ฒ€์ฆ์‹ ?



_.filter = function (arr, ์ง์ˆ˜ํŒ๋ณ„) {
  // TODO: ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  
  // ๋ณ€์ˆ˜ ์„ ์–ธ
  const result = []; // ์–ด๋–ค true ๋กœ ํ†ต๊ณผ๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ๋”ฐ๋กœ ๋ชจ์•„๋‘˜ ๋ฐฐ์—ด ๊ณต๊ฐ„ ์„ ์–ธ
  
  // ๋ฐฐ์—ด ๊ฐ’ ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌ
  -.each(arr,(์ง์ˆ˜ํŒ๋ณ„ ์ธ์ž ๊ฐ’)=>{
// ์ง์ˆ˜ํŒ๋ณ„ ๊ฐ’์ด true ๋ƒ ? 
// ์ง์ˆ˜ํŒ๋ณ„ ===> ์ธ์ž๊ฐ€ ์ง์ˆ˜ํŒ๋ณ„ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ์ง€์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๊ฐ’์„ true ๋กœ ๋ฑ‰์–ด ์ค„๊ฑฐ์ž„
if (์ง์ˆ˜ํŒ๋ณ„(์ง์ˆ˜ํŒ๋ณ„ ์ธ์ž๊ฐ’)){
result.push(์ง์ˆ˜ํŒ๋ณ„๊ฐ’);
}
  })
  return result;
};


_.filter = function (arr, test) {
// TODO: ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

let result = [];

// ๊ฒ€์‚ฌ์‹ ๋นผ์„œ
์ง์ˆ˜ ๋งŒ๋“œ๋Š” function (item) {
if(item % 2 === 0)
{
return true;
}
}

// === => == 
// ๋ฑ‰์–ด๋‚ด๋Š” true ํƒ€์ž…์— ์• ๋งคํ•œ ๋ฌด์–ธ๊ฐ€์˜ ๋ฌธ์ œ๊ฐ€.... ?

// ์ง์ˆ˜ ํŒ๋ณ„
_.each(arr, ์ง์ˆ˜ ๋งŒ๋“œ๋Š” function (item) {
    if (item % 2 == 0) {
      result.push(item);
    }
  })
 
// ๋ฌธ์ž์—ด ํ™•์ธ
  _.each(arr, function (item) {
      if (String(item).length >= 6) {
        result.push(item);
    }  })

// 
_.each(arr, function (item) {
// if ๋ฌธ ์•ˆ์—๋Š” true ์ธ ๊ฑฐ๋งŒ ์•Œ์ˆ˜ ์žˆ๊ฒŒ
// ๊ฒ€์‚ฌ์‹์€ ๋‹ค๋ฅธ function ์œผ๋กœ ๋นผ์„œ ๋งŒ๋“œ๋Š”๊ฑฐ
// ์‹œ๋„ ํ•ด๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š” !
if (item === true) {
result.push(item);
}
})

return result;

};




 [ once() ] 

 * ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ์กด ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰๋˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๋ณ€๋™๋˜๋Š” ํ•จ์ˆ˜๋ฅผ, ํ•œ ๋ฒˆ ๋ฆฌํ„ด๋œ ๊ฐ’๋งŒ ๋ฆฌํ„ดํ•˜๊ฒŒ ํ•˜๋Š” ํ•จ์ˆ˜(_.once)
 1. ์‹คํ–‰ ์—ฌ๋ถ€ ํŒ๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณ ๋ฏผ
 2. ํ•œ๋ฒˆ ์ด๋ฏธ ์‹œํ–‰์ด ๋˜์—ˆ์œผ๋ฉด ์ฒ˜์Œ return  ๊ฐ’์ด
 
 // ์ด ํ•จ์ˆ˜ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ๋Œ๊ฒŒ ๊ฒ€์‚ฌํ•ด์„œ .. ํ•œ๋ฒˆ ๋ฆฌํ„ด๋œ ๊ฐ’๋งŒ ๋ฆฌํ„ดํ•˜๊ฒŒ... "once"
 // 
 

_.once = function(func) {

// ์„ ์–ธํ•  ๋ณ€์ˆ˜ 
// 1. function ์ด ๋Œ์•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜
// 2. return ๊ฐ’

let functioncalledyn = false; //true
let result;

return function(...args){
// spread syntax : ๋ฐฐ์—ด ๊ฐ’ ๋œฏ์–ด์„œ.. ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ es6 ๋ถ€ํ„ฐ ๋‚˜์˜จ ๋ฌธ๋ฒ•
if(functioncalledyn === false){
result = func(...args);
functioncalledyn = true;
}
return result;
}

};

728x90
๋”๋ณด๊ธฐ
Document/๋จ•์„ ์ƒ์˜ ์ฝ”๋”ฉ๊ต์‹ค