flatten 고차 함수 구현

이재진·2020년 10월 2일
0
post-thumbnail

flatten은 다차원 배열을 입력받아, 1차원 배열로 변환하여 리턴합니다.

입력으로 전달되는 다차원 배열의 중첩 깊이는 정해져 있지 않습니다.
최종적으로 리턴되는 배열에는
1. 입력으로 전달되는 다차원 배열의 모든 요소가 포함되어야 합니다.
2. 배열인 요소가 없어야 합니다.
.each, .reduce 중 하나 이상을 반드시 사용하여야 합니다.

힌트
1. Array.isArray를 사용할 수 있습니다.
2. 중첩의 깊이를 미리 알 수 없으므로, 재귀 함수가 필요합니다.

each 이용 시

_.flatten = function (arr) {
let newArr = [];
  _.each(arr, function (ele) {
    if (Array.isArray(ele)) {
      newArr.push(..._.flatten(ele));//[spread문법]이용.
    } else {
      newArr.push(ele);
    }
  });
  return newArr;
  }

push 이용시 문법 주의. 바로 return 하면 안됨. newArr을 리턴해야함.

reduce 이용 1

_.flatten = function (arr) {
return _.reduce(arr, function(newArr, ele) {
    if(Array.isArray(ele)) {
      newArr.push(..._.flatten(ele));
    } else {
      newArr.push(ele);
    }  
    return newArr;
  }, [])
  }

reduce 이용 2

_.flatten = function (arr) {
return _.reduce(arr, function(newArr, ele) {
    if(Array.isArray(ele)) {
      newArr = [...newArr, ..._.flatten(ele)];
    } else {
      newArr = [...newArr, ele];
    }  
    return newArr;
  }, [])
  }

_.flatten = function (arr) {
return _.reduce(arr, function(newArr, ele) {
    if(Array.isArray(ele)) {
      return [...newArr, ..._.flatten(ele)];
    } else {
      return [...newArr, ele];
    }  
  }, [])
  }

concat 이용 시

_.flatten = function (arr) {
let newArr = [];
  _.each(arr, function (ele) {
    if (Array.isArray(ele)) {
      newArr = newArr.concat(_.flatten(ele));
    } else {
      newArr.push(ele);
    }
  });
  return newArr;
  }

concat 문법 사용 시 주의

let newArr = [];
  _.each(arr, function (ele) {
    if (Array.isArray(ele)) {
      newArr = [...newArr, ..._.flatten(ele)];
    } else {
      newArr.push(ele);
    }
  });
  return newArr;

concat 을 spread 연산자로 전개도 가능하다.

profile
개발블로그

0개의 댓글