31 JSテストコメント


今月16日(金)に上記のコードで2週間の無料レッスンを終了し、簡単なテストを行いました.
これは,期間中に学んだJSの知識を正しく利用できるかを確認するためのテストである.
全部で5問のうち4問に負担はありませんが、1問が間違っていて少し戸惑っています.だから私はその問題についてコメントします.
Q.質問内容
문자열에 해당 문자가 여러번 나타나면, 첫번째로 나타나는 위치를 반환해야 합니다. 
만약 문자가 문자열에 존재하지 않는다면, -1 을 반환해야 합니다.
중요!! indexOf 함수를 사용하지 마세요.

ex. 
const output = getFind('a', 'I am a hacker')
console.log(output) // --> 2
初めてindexOfを見て思い出したのですが、使わせてもらえず迷いました.だからまず問題を一つ一つ分けて解決することにした.
  • プールメソッド
    1)該当するテキストを検索します.
    2)文字がある場合は、対応するインデックス値を返します.
    3)文字を繰り返すと、最初に表示された文字の位置を返します.
    4)文字がない場合は-1を返します.
  • 3問目までは、あまり難しくありませんでした.
    function getFind(filter, sentence) { 
      let result;
    
      for(let i = 0; i < sentence.length; i++) {
        if(sentence[i] === filter) {
    // 문자열 타입은 배열처럼 각각의 글자에 index값이 부여된다는 점을 활용
          return  i;
          return result;
          break;
    // 첫 번째 값만 찾으면 되니 로딩시간을 줄일겸 `break`를 넣었다.
        }
      }
    }    
    しかし今でも番号が伏兵であることは知られていない.
    for(let i = 0; i < sentence.length; i++) {
      if(sentence[i] === filter) {
          result = i;
          return result;
        } else if (sentence.length - 1 !== filter){
      	  return -1
        }
    }
    最初は最後の文字まで繰り返して結果値がなければ-1を返せばいいと思っていました.しかし、filter値が文の最後の文字と一致しない場合、else ifの条件は常に真である.
    いろいろ考えてみたが、なかなか答えが見つからないので、アプローチそのものが問題だと思った.したがって、一致する文字がなければ、結果にどの値が印刷されるかをチェックするとundefinedがエクスポートされることがわかります.
    次に、エラーを解決し、答えとして提出するコードを示します.
    function getFind(filter, sentence) { 
      let result;
    
      for(let i = 0; i < sentence.length; i++) {
        if(sentence[i] === filter) {
          result = i;
          return result;
          break;
        }
      }
    
      if(result === undefined) {
        return -1
    // 반복문이 종료된 후에 result의 값이 undefined라면 일치하는 값이 없다는 뜻
      }
    }
  • 以降になって初めて知った事実ですが、includeやsearchを利用してより効率的なコードを記述することもできます.これは問題が発生したときにmdnで発見される方法であるが,正しく理解されていないため適用できない.
  • function getFind(filter, sentence) { 
      let condition = sentence.includes(filter);
    
      if(!condition) {
        return -1
      } else {
        return sentence.search(filter);
      }
    }

  • 確かに、コードはより効率的になりました.

  • 問題を解決する方法はいろいろありますが、その中にはもっと効果的な方法があるので、符号化が魅力的です.