index 값을 계속 더해준다고 생각하면 됩니다.
function solution(n) {
let answer = 0;
for (let i = 0; i <= n; i++) {
answer += i;
}
return answer;
}
console.log(solution(30)); // 465
배열 값의 합은 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
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 등