배열 코플릿을 처음부터 다시 풀어보았는데 처음 풀때보단 조금은 더 잘 풀 수 있었다. 문제를 풀면서 헷갈리거나 어려웠던 문제는 다시 풀어보기위해 따로 기록해두었다. 그 중 23번 문제를 기록해보려한다.
문제
배열과 인덱스를 입력받아 해당 인덱스의 요소를 제외한 배열을 리턴해야 합니다.
입력
인자 1 : arr
임의의 요소가 담긴 배열
인자 2 : n
number 타입의 인덱스
출력
인덱스에 해당하는 요소를 제외한 배열을 리턴해야 합니다.
주의 사항
배열의 길이보다 큰 인덱스를 입력받은 경우, 배열 그대로를 리턴해야 합니다.
입출력 예시
let output = getAllElementsButNth(['a', 'b', 'c'], 1);
console.log(output); // --> ['a', 'c']
function getAllElementsButNth(arr, n) {
if( arr.length <= n){
return arr
}
arr.splice(n, 1)
return arr
}
지금까지는 거의 slice만 사용하다 splice를 사용해보았다.
"splice() 메서드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경합니다." 출처: mdn
splice를 이용하여 n자리의 요소를 1개 삭제하는 방법으로 풀었다. 레퍼런스를 보니 다른 방법으로 풀이가 되어 있었다.
function getAllElementsButNth(arr, n) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (i !== n) {
result.push(arr[i]);
}
}
return result;
}
나는 잘라내는 방식으로 풀었다면 레퍼런스 코드에서는 빈배열이 있는 변수를 하나 선언한 후, 리턴할 값만 하나씩 넣어주는 방식이었다.
arr의 길이 보다 작을때 까지 for문을 돌리며 i가 n과 다르다면 변수 result에 arr[i]를 push로 넣어서 마지막에 해당 arr[i]이 들어간 result를 리턴한다. 코딩은 이렇게 다른 다양한 방법으로 풀 수 있다는것에서 재미있게 느껴진다.