구현하고자 하는 기능:
클라이언트가 선택한 항목들을 순차적으로 배열에 저장하고,
특정 요소를 삭제하면 그 빈자리를 바로 채워 공백이 맨 뒤로 오게 하는 기능
첫번째 시도: splice()로 요소를 삭제하고 push()를 곧바로 해주어 반환하게 한다.
const array = [0, 1, 2, 3, 4, 5]; // 원본 배열
const copyArray = [...array]; // 배열 복사
const newArray = copyArray.splice(0, 2).push('','');
console.log(newArray);
// 예상: [2, 3, 4, 5, '', ''] 결과: 4
splice메소드는 원본 배열을 변경하므로 복사를 해주어야겠다고 생각하고 진행했다.
하지만 복사한 배열엔 적용되지 않았다.
원본 배열에 splice와 push를 따로 해주어야만 예상했던 배열을 얻을 수 있었다.
const array = [0, 1, 2, 3, 4, 5]; // 원본 배열
array.splice(0, 2);
array.push('','');
console.log(array); // [2, 3, 4, 5, '', '']
두번째 시도: 삭제되어 ''로 변경된 요소를 filter()한 배열과 ''만 filter()한 배열을 concat()한다.
const words = ['', '', '', 'a', 'b', 'c'];
const result = words.filter((x) => x !== '').concat(words.filter((x) => x === ''));
console.log(result);
// Expected output: Array ['a', 'b', 'c', '', '', '']
이 방법을 선택한 이유는 2가지이다.
1. 원본 배열을 복사할 수 있음
2. 삭제해야할 요소의 인덱스를 알지 않아도 가능