숫자로 이루어진 배열을 입력받아, 원본 배열에서 인접한 두 요소의 차이를 새로운 배열로 반환하는 함수를 작성해야 합니다. 함수 이름은 예를 들어 arrayDistance()라고 정하겠습니다.
예를 들어, 입력 배열이 다음과 같다면 −
const arr = [1000,2000,5000,4000,300,0,1250];
출력 결과는 아래와 같이 각 인접 요소 쌍의 차이가 됩니다 −
[(1000-2000),(2000-5000),(5000-4000),(4000-300),(300-0),(0-1250)]
구현 방법
이 문제는 JavaScript의 reduce() 메서드를 활용하면 깔끔하게 해결할 수 있습니다. 배열을 순회하면서 현재 요소와 다음 요소의 차이를 계산하고, 그 절댓값을 결과 배열에 하나씩 추가하는 방식입니다.
코드 예제
const arr = [1000,2000,5000,4000,300,0,1250];
const arrayDistance = arr => {
return arr.reduce((acc, val, ind) => {
if(arr[ind+1] !== undefined){
return acc.concat(Math.abs(val - arr[ind+1]));
} else {
return acc;
}
}, []);
};
console.log(arrayDistance(arr));코드 설명
reduce()메서드는 빈 배열[]을 초기값으로 사용하여 순차적으로 누적합니다.- 현재 인덱스
ind의 다음 요소arr[ind+1]이 존재하는지 확인하여, 마지막 요소에서 범위를 벗어나는 오류를 방지합니다. Math.abs()를 사용해 두 요소 차이의 절댓값을 계산한 뒤,concat()으로 결과 배열에 추가합니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다 −
[ 1000, 3000, 1000, 3700, 300, 1250 ]
입력 배열의 길이가 7이므로, 인접 요소 쌍은 총 6개가 되어 출력 배열의 길이 역시 6인 것을 확인할 수 있습니다. 이처럼 reduce()와 조건문만으로도 배열 내 인접 요소 간의 거리를 손쉽게 계산할 수 있습니다.