내일배움캠프

230607 자바스크립트 타입을 고려해 sum() 함수 만들기

Neda 2023. 6. 7. 14:31

230607 자바스크립트 타입을 고려해 sum() 함수 만들기

 

reduce()로 만들기

가장 간단하게 만들 수 있는 함수지만, 문자열이나 다른 값에 대한 예외 처리가 존재하지 않는다.

const sum = (array) => array.reduce((acc,cur)=> acc+cur,0)
sum([1,2,3,4,5]) // 15

 

lodash의 sum()함수

lodash에서의 sum 구현 코드는 배열의 길이와 while문을 사용하여 모두 더한다.

if문을 통해 undefined를

code 정보: https://github.com/lodash/lodash/blob/4.17.15/lodash.js#L16487

const identity = (value) => value

function baseSum(array, iteratee) {
    var result,
        index = -1,
        length = array.length;

    while (++index < length) {
      var current = iteratee(array[index]);
      if (current !== undefined) {
        result = result === undefined ? current : (result + current);
      }
    }
    return result;
}

function sum(array) {
  return (array && array.length)
    ? baseSum(array, identity)
    : 0;
}

 

 

타입스크립트와 typeof를 사용한  sum 함수

이 함수는 숫자로 변환 가능한 문자열일 경우 변환된 숫자 값을 더한다.

function sum(numbers: number[]):number {
  let result = 0;
  for(const x of numbers) {
    if(typeof x === 'number') result += x;
    else if (typeof x === 'string') {
      const parsedNumber = parseFloat(x);
      if(!isNaN(parsedNumber)) {
        result += parsedNumber;
      }
    }
  }
  return result;
}

// sum([10, 20, 30, 40, 50, '10']) => 160
// 이 코드는 컴파일 단계에서는 타입스크립트로 인해 오류 발생