2016-03-12 84 views
3

我已經添加了鍵值對的字典如下字典鍵值總是返回undefined

var TextFile = {}; 
    jQuery.get('SpellCheck.txt', function (data) { 
      var Values = data.split('\n'); 
      for (var i = 0; i < 50; i++) { 
       var val = Values[i]; 
       TextFile[val] = 'true'; 
      } 
     }); 

文本文件具有以下值

enter image description here

Textfile['ABCD']返回爲未定義

+1

你在哪裏使用'TEXTFILE [ 'ABCD']'?在成功callBack裏面?或外面呢? Jquery.get是異步的。 –

+1

如果我沒有弄錯,值[0]是整行(或字符串) - 「ABCD」:「true」 – Jordan

+0

除了@RajaprabhuAravindasamy提到的,jquery.get也是一個HTTP Get調用。我假設你沒有使用它從本地系統獲取文件。我可能是非常錯誤的,但想澄清這一點。謝謝。 – Sid

回答

0

SOLUTION:

此問題源於您通過AJAX請求訪問文本內容而不是JSON對象。最終成爲你的屬性名稱的詞正在變成字符串(不像JSON,它們將是屬性標識符)。由於您使用的是字符串名稱,因此您必須使用Object.keys()來訪問這些屬性名稱。

以下代碼演示了具有標識符屬性的對象與對象之間的差異,它更像是具有字符串名稱的字典以及如何訪問字典與傳統對象。

SpellCheck.txt:

ABCD 
ABG 
ABI 
ABO 
AC 
ACE 
ACEI 
ACER 
ACL 
ADAM 
ADHD 
ADL 
ADPKD 
ADS 
AENNS 
AFB 
AFI 
AFO 
AFP 

您的代碼

var TextFile = {}; 
jQuery.get('SpellCheck.txt', function (data) { 
    var values = data.split('\n'); 
    for (var i = 0; i < values.length; i++) { 
    var val = values[i]; 
    TextFile[val] = 'true'; 
    } 
}); 

我的測試(置於其內的AJAX成功回調以上):

// Test of traditional JS object with properties that are not strings: 
    var myObj = { prop1: 1, prop2: 2 } 
    console.log(myObj); 

    // Test of your dictionary object and how you must use Object.keys() 
    // to access dictionary elements: 
    console.log(TextFile); 
    console.log("Name of first key in dictionary is: " + Object.keys(TextFile)[0]); 
    console.log("Value of first key in dictionary is: " + TextFile[Object.keys(TextFile)[0]]); 

這裏你可以看到在控制檯的JS引擎如何看待這兩個對象的區別:

enter image description here

通知你的對象屬性名稱是如何報價,但MyObj中的名字都沒有?

爲了得到你所希望看到的結果,呼籲一個JSON對象:


SpellCheck2.txt

{ 
    "ABCD" : "", 
    "ABG" : "", 
    "ABI" : "", 
    "ABO" : "", 
    "AC" : "", 
    "ACE" : "", 
    "ACEI" : "", 
    "ACER" : "", 
    "ACL" : "", 
    "ADAM" : "", 
    "ADHD" : "", 
    "ADL" : "", 
    "ADPKD" : "", 
    "ADS" : "", 
    "AENNS" : "", 
    "AFB" : "", 
    "AFI" : "", 
    "AFO" : "", 
    "AFP" : "" 
} 

指數。 html:

var result = ""; 
jQuery.get('SpellCheck2.txt', function (data) { 
    result = JSON.parse(data); 
    for (var prop in result) { 
    result[prop] = 'true'; 
    } 

    console.log("Value of result[\"ABCD\"] is: " + result["ABCD"]); 

}); 

結果:結果[ 「ABCD」]的值爲:真

+0

我的文本文件看起來像這樣ABCD ABG ABI ABO AC ACE ACEI ACER ACL ADAM ADHD ADL ADPKD ADS AENNS AFB AFI AFO AFP AGA AGCUS AH4 AH5 AH6 AIIS AKA AL ALG AML AMO ANCA AO APD APGAR APSGN AQ AR ARDS ARF ARM AROM與我沒有使用JSON對象每行 – Vaishali

+0

每個單詞。我正在使用數組來分配值。我仍然沒有得到解決方案 – Vaishali

+0

@Vaishali我的代碼使用一個文本文件,就像你的一樣(ABCD ABG ABI ABO AC A ...),每個值都在一個新行上,並顯示如何正確訪問結果字典。 ..與Object.keys()。我的答案的第二部分使用JSON的SUGGESTS並展示了(我知道這不是你現在使用的)。 –