
function solution(arr) {
// 예외 처리
if(arr.length === 1) return [-1];
// spread operator로 제일 작은 수를 찾는다.
let min = Math.min(...arr);
// 제일 작은 수가 아닌 숫자들을 배열에 담아 리턴한다.
return arr.filter((num)=> num !== min);
}
우선 문제의 요구사항에 따라 배열의 길이가 1일 경우의 예외 처리를 해주었습니다.
제일 작은 수를 찾기 위해 Math.min() 메서드를 사용하고, spread 연산자로 arr의 요소들을 전달해주었습니다.
Math.min()는 값들을 배열 형태로 받지 않기 때문에 배열의 요소들을 전달하기 위해서는 spread 연산자를 사용해 펼쳐주어야 합니다. (Math.max()도 동일하게 사용합니다.)
마지막으로 filter() 메서드를 사용해 가장 작은 수가 아닌 것들만을 담은 배열을 리턴합니다.
function solution(num){
// 예외 처리
if(arr.length === 1) return [-1];
// splice()와 indexOf()를 사용해 원본 배열에서 제거한다.
arr.splice(indexOf(Math.min(...arr)), 1);
return arr;
}
예외 처리는 동일합니다.
사실 이 풀이는 splice() 메서드를 사용한 점이 참신해서 가져왔습니다. splice() 메서드는 배열의 요소를 시작 인덱스부터 원하는 개수만큼 제거하거나, 제거한 다음 새로운 요소를 추가할 때 주로 사용합니다.
⭐️ 기본적인
splice()사용법
splice(시작 인덱스, 제거할 요소의 개수)또는
splice(시작 인덱스, 제거할 요소의 개수, 추가할 요소)
Math.min()의 결과값 즉 제일 작은 수의 인덱스를 indexOf()로 찾고, 해당 인덱스를 시작으로 1개를 제거하면 시작 인덱스의 값만 제거가 됩니다. 마지막으로 제거된 배열을 리턴합니다.⭐️
splice()는 원본 배열의 내용을 직접 변경합니다. 반면에 비슷하게 생긴slice()는 원본 배열을 직접 변경하지 않고 복사본 배열을 반환합니다. 따라서splice()를 사용할 경우 원본 배열을 반환하도록 합니다. 생김새가 비슷하지만 리턴값에서 차이가 나타나므로 사용할 때 주의합니다.
filter()도 괜찮은 방법이지만, splice()를 활용해볼 수 있는 문제였습니다.