문제

Write a function expect that helps developers test their code. It should take in any value val and return an object with the following two functions.

  • toBe(val) accepts another value and returns true if the two values === each other. If they are not equal, it should throw an error "Not Equal".
  • notToBe(val) accepts another value and returns true if the two values !== each other. If they are equal, it should throw an error "Equal".

https://leetcode.com/problems/to-be-or-not-to-be/

 

예시

toBe()의 경우 expect의 인자와 toBe의 인자를 비교하여 같으면 true를 반환하고, 같지 않으면 "Not Equal"이라는 에러를 발생시킨다.

notToBe()의 경우 expect의 인자와 notToBe의 인자를 비교하여 다르면 true를 반환하고, 같으면 "Eqaul"이라는 에러를 발생시킨다.

 

코드

/**
 * @param {string} val
 * @return {Object}
 */
var expect = function(val) {
    
    // 같은지 여부를 비교하는 함수
    const isEqual = (val, target) => {
        return val === target;
    }
    
    const ERROR_MESSAGE = {
        TO_BE: "Not Equal",
        NOT_TO_BE: "Equal",
    }

    return {
        toBe: function (target){
            if(isEqual(val, target)) return true;
            throw new Error(ERROR_MESSAGE.TO_BE);
        },
        notToBe: function (target){
            if(!isEqual(val, target)) return true;
            throw new Error(ERROR_MESSAGE.NOT_TO_BE);
        },
    }
};

/**
 * expect(5).toBe(5); // true
 * expect(5).notToBe(5); // throws "Equal"
 */

isEqual() 함수로 이용해 expect()로 들어온 인자와 toBe() 혹은 notToBe에 들어온 인자가 같은지를 비교한다. 또한, 에러 메시지를 상수로 빼서 따로 저장하였다. 리턴하는 객체에서 toBe 메서드의 경우 isEqual일 때 true를 리턴하도록 하였고, notToBe 메서드의 경우 isEqual이 아닐 때 true를 리턴하도록 하였다.

728x90

문제

Write a function argumentsLength that returns the count of arguments passed to it.

https://leetcode.com/problems/return-length-of-arguments-passed/

 

예시

 

코드

/**
 * @param {...(null|boolean|number|string|Array|Object)} args
 * @return {number}
 */
var argumentsLength = function(...args) {
    return args.length;
};

/**
 * argumentsLength(1, 2, 3); // 3
 */

 

인자의 개수를 리턴하면 된다.

728x90

문제

Write a function createHelloWorld. It should return a new function that always returns "Hello World".

https://leetcode.com/problems/create-hello-world-function/

 

예시

 

코드

/**
 * @return {Function}
 */
var createHelloWorld = function() {
    
    return function(...args) {
        return "Hello World";
    }
};

/**
 * const f = createHelloWorld();
 * f(); // "Hello World"
 */

 

createHelloworld는 함수를 반환해야 하고, 반환된 함수를 호출했을 때 "Hello World"라는 문자열이 리턴되면 된다.

728x90

문제

Given an integer array arr and a filtering function fn, return a filtered array filteredArr.

The fn function takes one or two arguments:

  • arr[i] - number from the arr
  • i - index of arr[i]

filteredArr should only contain the elements from the arr for which the expression fn(arr[i], i) evaluates to a truthy value. A truthy value is a value where Boolean(value) returns true.

Please solve it without the built-in Array.filter method.

https://leetcode.com/problems/filter-elements-from-array/

 

예시

직접 filter 함수를 구현하면 된다. array를 돌면서 fn의 함수에 true가 나오는 값만 얕은 복사하여 새로운 배열을 만들어 준다.

 

코드

type Fn = (n: number, i: number) => any

function filter(arr: number[], fn: Fn): number[] {
    let newArr = [];
    
    arr.forEach((number, idx)=>{
        if(fn(number, idx)){
            newArr.push(number);
        }
    });
    
    return newArr;
};

리턴할 새로운 배열인 newArr를 만들고, arr를 돌면서 fn의 결과가 true인 원소만 newArr에 추가해주었다.

728x90

+ Recent posts