2016-09-16 59 views
0

私は、多くの新聞に見られる古典的な "混乱した単語"パズルを解決するプロジェクトに取り組んでいます。このプロジェクトの基本的な考え方は、スクランブルされた単語(空白や特殊文字は使用できません)を受け取り、単語のすべての順列を生成し、教授によって提供された「辞書」に対して各順列をチェックし、次に実際には英語単語を配列に追加し、さらに処理して結果を出力します。JavaScript TypeError:プロパティ 'eat'を読み取ることができません。未定義

現在、私は、置換が「辞書」にあるかどうかを調べようとするときに問題が発生しています。以下のコードは私の教授によって提供され、外部テキストファイルから "辞書"を作成します。彼によると、辞書[w]は、単語の頻度を表す単語と対になった数字を返すべきです。単語が辞書にない場合は、「未定義」です。

function readDictionary() { 
    /** 
    * @type {string[]} 
    */ 
    const lines = fs.readFileSync("count_1w.txt", "utf-8").split("\n"); 
    var line; 
    const dictionary = {}; 
    for (line of lines) { 
     line = line.trim(); 
     let array = line.split('\t'); 
     if (array.length > 1) { 
      let word = array[0]; 
      let count = array[1]; 
      if (lexicon[word]) { 
       dictionary[word] = parseFloat(count); 
      } 
     } 
    } 
    return Object.freeze(dictionary); 
} 

function getDictionary() { 
    if (dictionary === null) { 
     dictionary = readDictionary(); 
    } 
    return dictionary; 
} 

var dictionary = getDictionary(); 

辞書[文字]が未定義でない場合は、私が書いた次のコードは...

function inDict(letters) { 
    if (dictionary[letters] !== undefined){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

を「真」を返す必要があります...しかし、現在の状態で、それはで例外TypeErrorこの投稿のタイトルは、 'eat'が生成された入力の最初の順列です。私の実際のコードでは、readDictionary()、getDictionary()、およびvar dictionary = getDictionaryはすべてinDict()の上で宣言されています。

さらに詳しい情報が必要な場合は、お気軽にお問い合わせください。 JavaScriptの個人的な知識の終わりに達しました。複数のGoogle検索では、私の特定のインスタンスで役に立たなかったものは何も見つかりませんでした。どんな提案や意見も大歓迎です!

+0

typeof variable!= 'undefined' – Laurianti

+0

または単に「辞書の中の文字を返す」 – adeneo

答えて

0

エラーメッセージは表示されません。dictionaryの値はundefinedですが、それはなぜですか?

問題は、関数getDictionaryは、undefinedを返します。条件dictionary === nullは、dictionaryの初期値がundefinedであり、undefined === nullfalseであるため、決してtrueではありません。

それでは、あなたが本当にやっていることは何もしません

var dictionary; // initial value is undefined 
dictionary = dictionary; 

です。

getDictionaryが必要な理由がわかりません。ただ、直接dictionaryを初期化します。また

var dictionary = readDictionary(); 

あなた可能性:

初期dictionarynull(しかし、なぜでしょう?)

var dictionary = null; 
dictionary = getDictionary(); 

ではなくundefinedに対して比較:

function getDictionary() { 
    if (dictionary === undefined) { 
     dictionary = readDictionary(); 
    } 
    return dictionary; 
} 

Ovは、dictionaryに暗黙の依存関係がありますが、値も返されるため、設計が不適切です。

+0

それはそれをしたようです。私の教授のように、このプロジェクトのために壊れたコードが提供されたようです。私はあなたの助けに感謝します。 – CthuluHoop

関連する問題