문제 이해
- 배열에 있는 값을 자르는 문법을 아는가?
- 값을 정렬 할 수 있는가
내가 작성한 답안
function solution(array, commands) {
let answer = []
for (let i = 0; i < commands.length; i++) {
answer.push(array.slice(commands[i][0] - 1, commands[i][1]).sort((a, b) => a - b)[commands[i][2] - 1])
}
return answer
}
- 반복되는 작업을 수행하기에 for문을 사용하였으며,값을 자는 것은 slice를 사용하며 원본 배열을 변경하지않고 새로운 array를 생성하여 return 하였음
다른사람의 풀이
function solution(array, commands) {
return commands.map(command => {
const [sPosition, ePosition, position] = command
const newArray = array
.filter((value, fIndex) => fIndex >= sPosition - 1 && fIndex <= ePosition - 1)
.sort((a, b) => a - b)
return newArray[position - 1]
})
}
- slice(a,b)문법에서 b가 짜를 마지막 index를 말하는데, 마지막 인덴스는 미포함하며 새로운 배열을 반환한다.
- 얕은 복사 slice 함수를 사용할 경우, 원본배열은 변하지 않음
const [sPosition, ePosition, position] = command
와 같은 배열 디스트럭처링(구조분해할당)을 쓰게되면 좀 더 가독성 높은 코드를 작성할 수 있음
- filter, map은 배열을 훼손하지 않고 새로운 배열을 만들어서 리턴함