周波数カウンター


このパターンは、JavaScriptオブジェクトを使用して、データを格納したり、データを生成したり、データの比較に最も有用です.
例に入りましょう.
2つの配列を受け入れるように、同じ名前の関数を書きます.配列1のすべての値が配列2の対応する値二乗を持つなら、意図した関数はtrueを返すべきです.
例えば
similar([1,2,3],[4,1,9])   this would return true
similar([1,2,1],[4,4,1])   this would return false
以下の周波数カウンター方式の使用
function similar(array1, array2) {

    if (array1.length !== array2.length){
        return false;    
    }

    let freqCounter1 = {};
    let freqCounter2 = {};

    for(let val of array1){
        freqCounter1[val] = (freqCounter1[val] || 0) +1      
    }

    for(let val of array2){
        freqCounter2[val] = (freqCounter2[val] || 0) +1      
    }


    for(let key in freqCounter1){

        if(!(key ** 2 in freqCounter2)){
            return false
        }

        if(freqCounter2[key ** 2] !== freqCounter1[key]) {
            return false;
        }
    }

   return true; 
}
テストケース

similar([1,2,3,2,5],[4,9,4,1]) returns false
similar([1,2,3],[9,1,4]) returns true


解説
それで、体系的なアプローチで物事をしましょう.私たちは最後のレッスンで自分自身を設定を解決するために行った意図したアプローチを採用してください.
  • 関数宣言:名前の宣言similar これは入力として2つの別個の配列をとります.
  • エッジケースthe first block of code after the function declaration. これは、それがコア・アルゴリズム論理の前に実行して、無効または望ましくない入力の場合、セット結果を返す短絡回路と称されることができる.
  • In this case, check if the length of the first array is not equal to that of the second array and returns an output. In this case, it just returns a false statement.


  • オブジェクトの宣言:このアプローチのコアロジックが依存している場所であると言うことができますが、それは必ずしもオブジェクトでなければならないことに注意してください.オブジェクトの大きなOはオブジェクトにアクセスしたり、削除したり、追加したりします.
    空のオブジェクトは、上記のように配列の各文字の頻度を格納するように宣言されました.
  • The same goes for freqCounter2.

  • コア目的:コアの目的に焦点を当てましょう.これはARRY 2内のArray 1の各文字の四角形の存在を探すことです.コードのブロックからfor(let key in freqCounter1){ freqcounter 1内の各キーを通してループを行い、結果として生じるコードのような比較を行いますif(!(key ** 2 in freqCounter2)){ これはfreqcounter 1の各キーの四角形がfreqcounter 2に存在しないかどうかをチェックする短絡回路として働き、偽を返す.
  • 最終的な部分:コードの最終的なブロックは、freqcounter 2の各々の要素の正方形がfreqcounter 1の対応する同等を有するかどうかチェックすることを目的とする.もし望むなら😩, それはfalseに評価します、そして、そうでないならば、我々は我々のコードretuns true; すべての条件が通過されるならば.
  • Another Example


    つのストリングを与えられて、2番目のストリングが最初のアナグラムであるかどうか決定するために、関数を書きます.アナグラムは、単語、フレーズ、または名前などの別の文字を並べ替えることによって形成されるRAT is an anagram of TAR
    function anagrams(first, second) {
    
        if(first.length !== second.length){
            return false;
        }
    
    
        let freqCounter1 = {};
        let freqCounter2 = {};
    
        for(let val of first){
            freqCounter1[val] = (freqCounter1[val] || 0) +1
        }
    
        for(let val of second){
            freqCounter2[val] = (freqCounter2[val] || 0) +1
        }
    
        console.log(freqCounter1);
        console.log(freqCounter2);
    
        for(let key in freqCounter1){
            if(!(freqCounter2.hasOwnProperty(key))){
                return false
            }
    
            if(freqCounter1.values !== freqCounter2.values){
                return false;
            }
        }
    
        return true;
    }
    
    テストケース

    similar(bat,tab) returns true
    similar([salt, tale) returns false


    上記の例が概念化されたパターンに光を当てることを願っています.次の講義でお会いしましょう.