고차함수 Coplit

const_yang·2021년 9월 11일
0

[JS/Node] 고차함수

목록 보기
2/2
post-thumbnail

- Coplit 01

함수들을 입력받아 함수들이 입력된 차례대로 결합된 새로운 함수를 리턴해야 합니다.

- 입출력 예시

function square(num) {
  return num * num;
}

function add5(num) {
  return num + 5;
}

function mul3(num) {
  return num * 3;
}

function isOdd(num) {
  return num % 2 !== 0;
}

let output = pipe(add5, square);
console.log(output(4)); // --> 81

output = pipe(square, add5, mul3);
console.log(output(4)); // --> 63

output = pipe(square, mul3, add5, add5, isOdd);
console.log(output(4)); // --> false

- 나의 풀이

1) 고차함수의 매개변수에 들어오는 함수에는 제한이 없다. 전개 문법을 사용하여 매개 변수에 들어올 함수를 배열화한다.
2) for문을 통해 처음 함수의 결과값이 다음 함수의 매개변수로 전달될 수 있도록 한다.

function pipe(...func) {
  return function (num) {
    let result = num;
    for (let i = 0; i < func.length; i++) {
      result = func[i](result)
    }
    return result
  }
}

- Coplit 02

정수를 요소로 갖는 배열과 정수(num)를 입력받아 num을 배열에 추가하고 정렬한다고 가정할 경우, num의 인덱스를 리턴해야 합니다.

- 입출력 예시

let output = getIndex([5, 4, 1, 3], 2);
console.log(output); // --> 1

output = getIndex([10, 5, 1, 3], 13);
console.log(output); // --> 4

- 나의 풀이

1) num보다 작은 수로 filter된 배열을 구한다.
2) filter된 배열의 길이가 num의 인덱스 번호가 된다.

function getIndex(arr, num) {
  return arr.filter(el => el < num).length
}

- Coplit 03

객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 100 보다 작은 요소들만 갖는 배열을 리턴해야 합니다.

- 입출력 예시

const obj = {
  key: [1000, 20, 50, 500],
};

let output = getElementsLessThan100AtProperty(obj, 'key');
console.log(output); // --> [20, 50]

- 나의 풀이

1) obj[property]가 배열인 경우에만, filter를 통해 100이하의 수로 정렬된 배열을 구할 수 있다.
2) filter 대신 lessThan100 함수를 사용해야 한다.
3) 배열 안에 있는 값이 number가 이어야만 한다.
4) 조건에 맞지 않는 경우

function lessThan100(number) {
  return number < 100 && typeof number === 'number'
}

function getElementsLessThan100AtProperty(obj, property) {
  const prop = obj[property];
  if (Array.isArray(prop)){
    return prop.filter(lessThan100);
  }
  return []
}

- Coplit 04

2차원 배열(배열을 요소로 갖는 배열)을 입력받아 배열들의 요소를 모두 담고 있는 단일 배열을 리턴해야 합니다.

- 입출력 예시

let output = joinArrayOfArrays([
  [1, 4],
  [true, false],
  ['x', 'y'],
]);

console.log(output); // --> [1, 4, true, false, 'x', 'y']

- 나의 풀이

1) 배열과 배열을 붙이는 array.prototype.concat() 메소드를 사용한다.

function joinArrayOfArrays(arr) {
  return arr.reduce(((acc, cur) => acc.concat(cur)))
}

0개의 댓글