(underscore.js)_.every()

호두파파·2021년 2월 25일
0

underScore.js

목록 보기
5/9

_.every

collection의 모든 요소를 iterator의 인자로 넘겨 실행된 결과가 모두 true인지 반환하는 함수

_.every(list, [predicate], [context])
  • list : collection으로써, 배열이나 객체가 될 수 있다.
  • [predicate] : list의 각 element(value)의 결과 값이 trutu인지 확인하는 test 함수이다.(생략가능)
  • [context] : predicate 함수에서 this로 바인딩 되는 것이다.(생략 가능)

List의 각 element(value)를 [predicate] 함수로 돌려, 모든 element(value)가 통과될 경우, truth를 리턴한다. 만약 한 개의 element(value)라도 통과를 못하면, false를 리턴한다.

예제

_.every([2, 4, 5], function(num) { return num % 2 == 0; }); // false
// 배열 [2, 4, 5]의 각 element를 num 인자에 입력하여, 하나의 element라도 통과가 못되면 false를 리턴한다.

구현 알고리즘

  • 함수의 인자로 collection과 iterator를 가져온다.
  • collection이 empty일 경우, true를 리턴한다.
  • reduce 함수를 사용해서, 초기 memo 값을 true로 함수를 돌린다.
  • iterator 함수를 testNew 변수로 선언하여, collection의 각 element(value)를 돌리면서, 그 값이 true이면 initial을 true로 리턴하여, 다음 element(value)를 계속 돌린다.
  • 만약, 그 값이 true가 아니면, initial을 false로 리턴한다.
  • 그리고, iterator 함수가 _.identity()로 나와있을 경우의 문제도 있었기 때문에, testNew를 아래와 같이 선언했다.
  • 함수를 돌려, 모든 결과값이 true가 될 경우에는, 최종적으로 true를 리턴한다.
_.every = function(collection, iterator) {
  if(collection.length === 0) {
    return true;
  }
  let testNew = iteratro || _.identity;
  return _.reduce(colleciton, function(initial, item) {
    if (initail === false) {
      return false;
    } else if (testNew(item)) {
      initial = true;
    } else {
      initial = false;
    }
    return initial;
  }, true);
};
profile
안녕하세요 주니어 프론트엔드 개발자 양윤성입니다.

0개의 댓글