javascript - 字典键值总是返回未定义

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

文本文件具有以下值

enter image description here

但是 Textfile['ABCD'] 返回为未定义

最佳答案

解决方案:

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

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

拼写检查.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 名称不是?

To get the result you were hoping for, call for a JSON object:


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"]);

});

结果: result["ABCD"] 的值为:true

关于javascript - 字典键值总是返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35953915/

相关文章:

javascript - LIightBox2 数据标题描述链接与 JavaScript

javascript - 更改数据表中ajax请求中下拉菜单的选择选项

javascript - 可以将默认参数设置为变量 JS

javascript - DAT.GUI : modify width of text field in order to put a long text

javascript - MooTools:如何使对象捕获其嵌套对象中发生的自定义事件?

javascript - 如何修复 Nodemon "async remove {}"语法错误?

javascript - 如果内容非常少,如何将页脚始终贴在页面底部?

javascript - jqPlot 图 "TypeError"

当今世界的 JavaScript

javascript - 使用react从数组中删除元素