[テストエンコーディング]JavaScript 7


質問する


問題の説明
配列のi番からj番までを切り取って並べ替えると、k番目の数字を求めようとします.
例えばarrayが[1,5,2,6,3,7,4],i=2,j=5,k=3の場合
  • 配列の2番目から5番目の場合は[5,2,6,3]である.
  • 1の配列を並べ替えると[2,3,5,6].
  • 2の配列の3番目の数字は5です.
  • 配列配列、[i、j、k]を要素とする2次元配列コマンドをパラメータとして与える場合は、commandsのすべての要素に前述の演算を適用した結果を配列に戻してsolution関数を作成します.
    せいげんじょうけん
  • arrayの長さは100を超えない.
  • arrayの各要素は1または100未満です.
  • コマンドの長さは50を超えません.
  • コマンドの各要素の長さは3です.
  • I/O例
    arraycommandsreturn[1, 5, 2, 6, 3, 7, 4][[2, 5, 3], [4, 4, 1], [1, 7, 3]][5, 6, 3]
    [ソース]プログラマー(https://programmers.co.kr/learn/courses/30/lessons/42748)

    答え


    答え.
    function solution(array, commands) {
        let answer = [];
        let answerArray = []
        for (let el of commands) {
            answerArray = array.slice(el[0]-1,el[1])
            answerArray.sort((a,b) => a-b);
            answer.push(answerArray[el[2]-1])
        }
        return answer;
    }
    commandsは配列内の構造であるため,文を繰り返して対応する値を求め,答え配列に追加する形でコードを記述する.arrayでは、sliceメソッドを使用して、対応する範囲を個別の変数に格納し、昇順にソートし、対応する数値を答えにプッシュします.
    答え.
    function solution(array, commands) {
        let answer = [];
        answer = commands.map(el=>{
            return array.slice(el[0]-1,el[1]).sort((a,b)=>a-b)[el[2]-1];
        })
        return answer;
    }
    簡単なコードなのですぐに書きますが、後でmapという方法がわかったのでmapを使って短いコードに変えました.重複文の代わりにmapを用い,可読性として宣言された変数を除去する以外は,構造は同じである.分かりにくいですが、mapの使い方はもうマスターしました.