배열을 반복문을 이용해서 콜백이 true를 반환하면 true를 반환하는 부분부터 배열을 반환하시오.
function dropElements(arr, func) {
// Drop them elements.
for (let i = 0; i < arr.length; i++){
if (func(arr[i])) { // 가.
return arr.slice(i); // 나.
}
}
return []; // 다.
}
가. func
가 true
를 반환하면
나. true
를 반환한 i
번째 부터 마지막까지 배열을 잘라서 반환
다. 조건에 만족하지 않다면 []
를 반환
풀이 과정에서 slice
대신 splice
를 사용했다. splice
를 사용했을 때 조건이 false
일 때 값을 하나씩 제거했다. 그 결과 배열이 하나씩 앞으로 당겨지면서 바로 다음 배열로 가는게 아니라 하나 건너띄어서 값을 탐색된다. 고민하다가 떠오른게 slice
였다. i
번째가 조건이 맞으면 i
번째 포함해서 배열을 반환했다.
위의 글을 작성하면서 splice
로 해결할 수 있는 방법을 생각했다. i
값을 변화시키지 않고, func
가 false
를 반환하면 splice
의 의해서 제거가 되니깐 한칸씩 앞으로 오게 되고 true
가 나올 때까지 앞으로 당겨진다. true
이면 나머지를 반환한다.
function dropElements(arr, func) {
// Drop them elements.
for (let i = 0; i < arr.length;){
if (!func(arr[i])) {
arr.splice(i, 1);
} else {
return arr;
}
}
return [];
}
이 방법이 지어진 함수명(dropElements
)과 가깝다고 생각된다.