我已将键值对添加到字典中,如下所示
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['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 引擎如何看待这两个对象的差异:
请注意您的对象属性名称是如何被引用的,但 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