1부터 N까지 합 구하기

heyj·2022년 3월 22일
0

Coding Test

목록 보기
4/15

1. 1부터 n까지 정수의 합 구하기

index 값을 계속 더해준다고 생각하면 됩니다.

function solution(n) {
  let answer = 0;
  for (let i = 0; i <= n; i++) {
    answer += i;
  }

  return answer;
}

console.log(solution(30)); // 465

2. 배열 값 모두 더하기

배열 값의 합은 Array의 reduce(리듀서) 메소드를 사용하면 쉽게 구할 수 있습니다.
(https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)

reduce()는 배열 내에 존재하는 각 요소에 대해 callback 함수를 한 번씩 실행하는데, 콜백 함수는 accumulator, currentValue,
currentIndex, array의 네 인수를 받습니다.

reduce() 함수 호출에서 initialValue를 제공한 경우, accumulator는 initialValue와 같고 currentValue는 배열의 첫 번째 값과 같습니다. initialValue를 제공하지 않았다면, accumulator는 배열의 첫 번째 값과 같고 currentValue는 두 번째와 같습니다.

let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];

function sum(arr) {
  let answer = 0; // answer가 initialValue로 제공. 만약 값을 20으로 변경한다면 log에는 160이 찍힘
  answer = arr.reduce((acc, cur) => acc + cur, answer)
  return answer;
}

console.log(sum(arr)) // 140

reduce() 예제

1) 객체 배열에서 값 합산

let init = 0;
let sum = [{age: 10}, {age: 20}, {age: 30}].reduce((acc, cur) => acc + cur.age , init)

console.log(sum) // 60

2) 중첩 배열 펼치기

let flattened = [[0, 1], [2, 3], [4, 5]].reduce((acc, cur) => acc.concat(cur),
  []
);

console.log(flattened) // [0, 1, 2, 3, 4, 5]

3) 객체 내 인스턴스 값 세기

let fruits = [
  "Apple",
  "Melon",
  "Apple",
  "Banana",
  "Strawberry",
  "Apple",
  "Banana"
];

let fruitsObj = fruits.reduce((allFruits, fruit) => {
  if (fruit in allFruits) {
    allFruits[fruit]++;
  } else {
    allFruits[fruit] = 1;
  }
  return allFruits;
}, {});

console.log(fruitsObj);

4) 속성으로 grouping하기

let people = [
  { name: "Alice", age: 21 },
  { name: "Max", age: 20 },
  { name: "Jane", age: 20 }
];

function groupBy(objectArray, property) {
  return objectArray.reduce(function (acc, obj) {
    let key = obj[property];
    if (!acc[key]) {
      acc[key] = [];
    }
    acc[key].push(obj);
    return acc;
  }, {});
}

let groupedPeople = groupBy(people, "age");

console.log(groupedPeople);

// {
//  '20': [ { name: 'Max', age: 20 }, { name: 'Jane', age: 20 } ],
//  '21': [ { name: 'Alice', age: 21 } ]
// }

추가 정리 필요
Bonding arrays contained in an array of objects using the spread operator and initialValue,
Remove duplicate items in an array,
Replace .filter().map() with .reduce(),
Running Promises in Sequence,
Function composition enabling piping,
Write map using reduce 등

0개의 댓글