이번 글에서는 숫자 배열을 입력받아 동일한 숫자들을 모두 한 인덱스에 합산하는 JavaScript 함수를 작성해 보겠습니다.
예시
입력 배열이 다음과 같다면 −
const arr = [20, 10, 15, 20, 15, 10];
출력 결과는 다음과 같아야 합니다 −
const output = [40, 20, 30];
즉, 값이 20인 요소 두 개(20 + 20 = 40), 값이 10인 요소 두 개(10 + 10 = 20), 값이 15인 요소 두 개(15 + 15 = 30)가 각각 하나씩만 남도록 합쳐지는 것입니다.
구현 코드
이 함수의 코드는 다음과 같습니다 −
const arr = [20, 10, 15, 20, 15, 10];
const addSimilar = arr => {
for(let i = 0; i < arr.length; i++){
while(i !== arr.lastIndexOf(arr[i])){
const ind = arr.lastIndexOf(arr[i]);
arr[i] += arr.splice(ind, 1)[0];
};
};
};
addSimilar(arr);
console.log(arr);
코드 설명
이 코드의 동작 원리를 단계별로 살펴보겠습니다.
- lastIndexOf(): 현재 요소와 같은 값이 배열 뒤쪽에 더 존재하는지 확인합니다. 현재 인덱스와 마지막으로 발견된 인덱스가 같다면 해당 값은 더 이상 중복되지 않은 것입니다.
- splice(): 뒤쪽에 있는 중복 요소를 배열에서 제거하면서 제거된 값을 반환합니다.
- 누적 합산: 반환된 값을 현재 요소에 더해(arr[i] += ...) 중복된 값들을 하나의 인덱스에 모읍니다.
이 과정을 반복하면서 배열의 앞쪽부터 차례대로 중복 값들이 하나로 합쳐지고, 최종적으로 중복 없이 합산된 배열만 남게 됩니다.
출력
콘솔에 출력되는 결과는 다음과 같습니다 −
[ 40, 20, 30 ]