2016-09-16 1 views
0

저는 많은 신문에 나오는 고전적인 "뒤죽박죽 단어"문제를 해결하는 프로젝트를 진행하고 있습니다. 프로젝트의 기본 아이디어는 스크램블 된 단어 (공백이나 특수 문자가 없음)를 받아들이고 단어의 모든 순열을 생성하고 교수가 제공 한 "사전"에 대해 각 순열을 검사 한 다음 실제로는 영어 인 각 순열을 추가한다는 것입니다 단어를 배열로 변환 한 다음 결과를 산출합니다.JavaScript TypeError : 'eat'속성을 읽을 수 없습니다. 정의되지 않음

현재 순열이 "사전"에 있는지 확인하려고 할 때 문제가 발생합니다. 아래 코드는 내 교수가 제공했으며 외부 텍스트 파일에서 "사전"을 만듭니다. 그 사람에 따르면, dictionary [w]는 단어의 빈도를 나타내는 단어와 쌍을 이루는 숫자를 반환해야하며, 단어가 사전에 없으면 "undefined"를 반환해야합니다. 나는 사전 [문자] 정의되지 않은 경우 "true"를 반환해야합니다 작성한

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; 
    } 
} 

는 ... 그러나 현재 상태에서 그것은 형식 오류에 던졌습니다 이 게시물의 제목은 '먹는 것'이 생성 된 입력의 첫 번째 순열 인 것입니다. 실제 코드 인 readDictionary(), getDictionary() 및 var dictionary = getDictionary는 모두 inDict() 위에 선언되어 있습니다.

자세한 내용이 필요하면 언제든지 문의하십시오. 자바 스크립트에 대한 개인적인 지식이 끝났으며 여러 가지 Google 검색을 통해 내 특별한 경우에는 도움이되지 않았습니다. 어떤 제안이나 의견이라도 대단히 감사합니다!

+0

variable!= '정의되지 않음' – Laurianti

+0

또는 그냥 '사전에있는 문자 반환' – adeneo

답변

0

오류 메시지가 분명합니다. dictionary의 값은 undefined입니다. 그 이유는 무엇입니까?

문제는 기능이 getDictionary이면 undefined이 반환된다는 것입니다. 의 초기 값이 undefined이고 undefined === nullfalse이기 때문에 조건 dictionary === null은 결코 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 0x은 dictionary에 대한 암시 적 종속성을 갖기 때문에 잘못 설계되었지만 값도 반환합니다.

+0

그걸 한 것처럼 보입니다. 내 교수님이이 프로젝트에 깨진 코드를 제공 한 것처럼 보입니다. 도와 주셔서 감사합니다. – CthuluHoop

관련 문제