[プログラマー]K番目の数字(JavaScript)


初めての試み

function process(array, command) {
    const start = command[0] - 1;
    const end = command[1];
    const index = command[2] - 1;
    return array.slice(start, end).sort()[index];
}

function solution(array, commands) {
    return commands.map((command) => process(array, command));
}
commands要素の回転毎にコマンドを実行するprocess関数を定義した後、commands.map()を使用した.
「しかし、テストケース2ではいつもエラーが発生しているので、別の方法を試してみました.」

二次試行

function solution(array, commands) {
    return commands.map(([start, end, index]) => (
        array.slice(start-1, end).sort()[index - 1]
    ))
}
きれいに直したと思ったが、テストケース2で失敗した.
調べてみると、並んでいる数字が文字として認識されていて、間違いがあるかもしれません.

修正されたコード

function solution(array, commands) {
    return commands.map(([start, end, index]) => (
        array.slice(start-1, end).sort((a, b) => a - b)[index - 1]
    ))
}
配列時にはcompareFunctionをパラメータとして渡してこそ、このような誤りを防ぐことができると言われています.
参考MDN!

問題のソース


https://programmers.co.kr/learn/courses/30/lessons/42748?language=javascript

リファレンス


https://velog.io/@qmasem/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-K%EB%B2%88%EC%A7%B8%EC%88%98-JavaScript
https://okky.kr/article/569591(←ここのコメントでコンソールを撮るのは助かります)