2016-03-12 83 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并展示了(我知道这不是你现在使用的)。 –