我知道对象中的属性可以作为[]后缀中的字符串表达式检索.notation或wrap key。例如
var character = {
"name" : "Gloria",
"feature" : "Dance"
};
console.log("using .notation: "+character.name);
console.log("using []suffix: "+character["name"]);
它的效果非常好。但是,当我通过从对象数组中检索值来执行相同操作时, .Notation 根本不起作用。代码如下所示。
var info = {
"full_name" : "Some Name",
"title" : "Some title",
"links" : [
{ "blog" : "http://iviewsource.com" },
{ "facebook" : "http://facebook.com/iviewsource" },
{ "youtube" : "http://www.youtube.com/planetoftheweb" },
{ "podcast" : "http://feeds.feedburner.com/authoredcontent" },
{ "twitter" : "http://twitter.com/planetoftheweb" }
]
};
然后,当我尝试使用以下代码段
从数组中的每个对象检索值时for(var i = 0; i < info.links.length; i++) {
for(var key in info.links[i]) {
console.log("key is: "+key+" and it's value: "+info.links[i][key]);
}
}
在上面的代码中,要检索我正在使用 info.links [i] [key] 的值,它会按预期工作,但如果我使用 info.links [i] .key ,它只是给出了我未预料到的未定义。
我想知道为什么?这让我很困惑。
答案 0 :(得分:0)
key
不是该对象的属性,这就是它无法工作的原因。密钥是您要访问的密钥的另一个元素。
在JavaScript中,
obj.key
将访问key
对象的obj
属性。但是下面的代码,
obj["key"]
将访问键&#34; key
&#34;中的元素。您应该考虑更多地关注映射值,也称为词典或Map。
答案 1 :(得分:0)
如果您确实使用info.links[i].key
,那么它将无效,因为没有与名为key的键相关联的值。如果你有其他意思,请编辑问题以反映这一点。
拥有一个链接名称为密钥的数据结构也有点误导。拥有密钥名称和链接会更好,然后您可以通过info.links[i].name
和info.links[i].link