我有一个包含两个嵌套动态键的 var 数据。
我没有读取键“key_1”的内容值
var A = '"' + 123456789 + '"';
var B = '"' + 987654321 + '"';
var AA = '"' + 42 + '"';
var data = {
"123456789":{
"42":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_2":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_3":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
}
},
"987654321":{
"DYNAMIC_KEY_1":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_2":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_3":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
}
}
}
alert(data[A][AA]["key_1"]);
未捕获类型错误: 无法读取未定义的属性“42”
我尝试了几种解决方案,但没有!
有人可以解释一下如何继续吗?谢谢:)
--- 更新 ---
很奇怪,应用了你的建议,我仍然有同样的错误......
在我的代码中,var A 是由函数中的数字变量提供的全局变量 (productID)。
var AA 也对应于另一个文件中的变量(userID),该变量通常是数字变量。
var room;
function ioJoin(Mid){
room = Mid;
var _localuserid = LS.wpbp.id;
var trackdata = {};
var users = {};
users[_localuserid] = {
active: true,
time: $.now(),
user: LS.wpbp.id,
productID: Mid
}
trackdata[Mid] = users
socket.emit('send:newuser', trackdata);
}
socket.on("load:joinroom", function(data) {
var _localuserid = LS.wpbp.id;
// room & _localuserid are numbers
alert(data[room][_localuserid]["active"]);
});
我真的不明白问题出在哪里!
最佳答案
请勿在属性名称中添加引号。 '"' + 123456789 + '"'
为您提供值 '"123456789"'
(请注意开头和结尾的双引号,实际上是 字符串)。您只需要'123456789'
。
所以:
var A = '123456789';
var B = '987654321';
var AA = '42';
实例:
var A = '123456789';
var B = '987654321';
var AA = '42';
var data = {
"123456789":{
"42":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_2":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_3":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
}
},
"987654321":{
"DYNAMIC_KEY_1":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_2":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_3":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
}
}
}
alert(data[A][AA]["key_1"]);
对于其中没有前导零的情况,您甚至可以完全取消引号并使用数字(这将被 []
强制转换为字符串)。
实例:
var A = 123456789;
var B = 987654321;
var AA = 42;
var data = {
"123456789":{
"42":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_2":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_3":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
}
},
"987654321":{
"DYNAMIC_KEY_1":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_2":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
},
"DYNAMIC_KEY_3":{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3"
}
}
}
alert(data[A][AA]["key_1"]);
关于JavaScript - 将动态键中的键/值数据获取到动态键中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30193438/