字典键值始终返回undefined

时间:2016-03-12 04:51:55

标签: javascript

我已将键值对添加到字典中,如下所示

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

Textfile具有以下值

enter image description here

Textfile['ABCD']以未定义的方式返回

1 个答案:

答案 0 :(得分:0)

<强> SOLUTION:

问题源于您通过AJAX请求而不是JSON对象访问文本内容这一事实。最终成为您的属性名称的单词将变为字符串(与JSON不同,它们将成为属性标识符)。由于您使用的是String名称,因此必须使用Object.keys()来访问这些属性名称。

以下代码演示了具有标识符属性的对象与您的对象之间的区别,它更像是具有String名称的字典以及如何访问字典与传统对象。

<强> 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名称不是<?em>

  

要获得您希望的结果,请调用JSON对象:

<强> SpellCheck2.txt

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

<强>的index.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"]);

});

结果:结果的值[&#34; ABCD&#34;]为:true