배열 아카이브에 담았지만, 따로 정리가 필요한 친구
reduce()
메서드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고,
하나의 결과값을 반환함
arr.reduce(callback[, initualValue])
callback
배열의 각 요소에 대해 실행할 함수. 다음 네 가지 인수를 받는다.
accumulator
currentValue
currentIndex
Optional
array
Optional
initialValue
Optional
const array1 = [1, 2, 3, 4];
// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce(
(accumulator, currentValue) => accumulator + currentValue,
initialValue
);
console.log(sumWithInitial);
// Expected output: 10
ㄴ 현재는 initialValue를 제공해주고 있으므로 0번 인덱스부터 합을 구한다.
ㄴ 제공해주지 않으면 1번째 인덱스부터 시작함
const array1 = [1, 2, 3, 4];
array1.reduce((prev,curr) => prev + curr ); // 10
array1.reduce((prev,curr) => prev + curr, 10); // 20
객체 배열에서도 쓸 수 있다. 편리하다 편리해
var initialValue = 0;
var sum = [{x: 1}, {x:2}, {x:3}].reduce(
(accumulator, currentValue) => accumulator + currentValue.x
,initialValue
);
console.log(sum) // logs 6
var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
( accumulator, currentValue ) => accumulator.concat(currentValue),
[]
);
// 펼친 결과: [0, 1, 2, 3, 4, 5]
Array.flat() 메서드도 있음
var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
var countedNames = names.reduce(function (allNames, name) {
if (name in allNames) {
allNames[name]++;
}
else {
allNames[name] = 1;
}
return allNames;
}, {});
// countedNames is:
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
짧게 쓰면 이렇게 됨 (폰켓몬 문제 풀이 코드)
const countnums = (arr) => {
return nums.reduce((p,c)=>{
p[c] = ++p[c] || 1;
return p;
}, {});
};
let arr = [1, 2, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4];
let result = arr.sort().reduce((accumulator, current) => {
const length = accumulator.length
if (length === 0 || accumulator[length - 1] !== current) {
accumulator.push(current);
}
return accumulator;
}, []);
console.log(result); //[1,2,3,4,5]
let result = array.reduce((ac, v) => ac.includes(v) ? ac : [...ac, v], []);
console.log(result3); // ['C', 'A', 'B', 'D', 'E']
✅ Set과 Array.from()을 사용할 수 있는 환경이라면, let orderedArray = Array.from(new Set(myArray));
를 사용해 중복 요소를 제거하면 됨