(underscore.js) _.invoke

호두파파·2021년 3월 1일
0

underScore.js

목록 보기
8/9

_.invoke

list에서 methodName을 정의하면 해당 method를 이용해 return 값을 반환한다.

_.invoke(list, methodName, *arguments)
  • list : 데이터 리스트를 기억하는데 사용된다.
  • methodName : 이 인수는 시험되고 있는 테스트 케이스를 기억하는데 사용된다.
  • arguments : 첫 번째 인자로 배열을 받고, 두번째 인자로 (메서드 이름) 명령어를 받는다.

예제

_.invoke([5, 1, 7], [3, 2, 1], 'sort');
=> [[1, 5, 7], [1, 2, 3]]

함수 구현하기

  _.invoke = function(collection, functionOrKey) {
    let result = [];
    let args = Array.prototype.slice.call(arguments, 2);

    if(typeof arguments[1] === 'string'){
      for(let i = 0; i < collection.length; i++){
        result.push(collection[i][functionOrKey](args));
      }
    } else {
      for(let i = 0; i < collection.length; i++){
        result.push(functionOrKey.apply(collection[i]));
      }
    }
    return result;
  };

arguments가 인수로 주어지지 않았을때, args 인수 선언하기

  • _.invoke()함수는 두 개 이상의 인수를 전달한다.
    첫 번째는 작업할 목록, 두번째는 메서드다. 후속 인수는 목록의 각 요소에 대한 매서드에 전달된다.

  • .apply()는 목록의 요소를 컨텍스트로 사용해 해당 함수를 호출한다.

let slice = Array.prototype.slice;
args = slice.call(arguments, 2);
// 요약해서 표현하면 
let args = Array.prototype.slice.call(arguments, 2);
profile
안녕하세요 주니어 프론트엔드 개발자 양윤성입니다.

0개의 댓글