如何使用Javascript中的唯一键访问多维对象中的值?

如何使用Javascript中的唯一键访问多维对象中的值?,javascript,object,Javascript,Object,如何访问下面对象中的name值?此外,由于唯一键(即friend1和friend2)包含其他键/值对,因此此对象是否具有特殊名称 var friends = { "friend1":{ "name":"ana", "position":1, "spouse":"billy" }, "friend2":{ 'name':'keri',

如何访问下面对象中的
name
值?此外,由于唯一键(即
friend1
friend2
)包含其他键/值对,因此此对象是否具有特殊名称

    var friends = {
        "friend1":{
            "name":"ana",
            "position":1,
            "spouse":"billy"
        },
        "friend2":{
            'name':'keri',
            'position':2,
            'spouse':'david'
        }
    };
请注意,这是我正在进行的项目的简化版本。我意识到有一种更好的方法来保存好友列表的数据——要记住的一点是,保存其他键/值对的键是唯一的

我已经试过了,但显然不起作用(即“未定义”):

for(i=0;i
下面是一个示例。

请尝试以下内容

var keys = Object.keys(friends);
for( i = 0; i < keys.length; i++ ) {
  var theFriend = friends[keys[i]].name;
  alert(theFriend);
}
var-keys=Object.keys(朋友);
对于(i=0;i
参考-

尝试以下内容

var keys = Object.keys(friends);
for( i = 0; i < keys.length; i++ ) {
  var theFriend = friends[keys[i]].name;
  alert(theFriend);
}
var-keys=Object.keys(朋友);
对于(i=0;i
供参考-

您刚刚创建了一个新数组,并将
i
的值放入其中

您需要告诉JavaScript您正在访问的
i
属性是什么对象

friends[Object.keys(friends)[i]].name
您刚刚创建了一个新数组,并将
i
的值放入其中

您需要告诉JavaScript您正在访问的
i
属性是什么对象

friends[Object.keys(friends)[i]].name
请大师:

Maestro请:

在ES5中,使用:

for (var index in friends) {     // NB: index and name have function scope
    var name = friends[index].name;
}
在ES6中,使用:

for (let friend of friends) {    // NB: 'of', not 'in'
    let name = friend.name;
}
如果必须对
循环使用普通的
,请确保在每次迭代中都不会计算循环不变量:

var keys = Object.keys(friends);
for (var i = 0, n = keys.length; i < n; ++i) {
    var name = friends[i].name;
}
var-keys=Object.keys(朋友);
对于(变量i=0,n=keys.length;i
即使这样,也不建议使用此循环-使用带有
for.的对象的单次传递更便宜。。在
中,创建一个键数组,然后遍历该数组。ES6<代码>用于。。of
更好。

在ES5中,使用:

for (var index in friends) {     // NB: index and name have function scope
    var name = friends[index].name;
}
在ES6中,使用:

for (let friend of friends) {    // NB: 'of', not 'in'
    let name = friend.name;
}
如果必须对
循环使用普通的
,请确保在每次迭代中都不会计算循环不变量:

var keys = Object.keys(friends);
for (var i = 0, n = keys.length; i < n; ++i) {
    var name = friends[i].name;
}
var-keys=Object.keys(朋友);
对于(变量i=0,n=keys.length;i

即使这样,也不建议使用此循环-使用带有
for.的对象的单次传递更便宜。。在
中,创建一个键数组,然后遍历该数组。ES6<代码>用于。。当然
更好。

大多数时候,如果你看到这样的结构,你就错了…@Alnitak谢谢你解决这个问题。我自己也没见过这种格式,但我遇到了一个基于中心位置计算距离的工具,我用他的代码构建了一个项目,在谷歌地图上放置多个标记。可能还有其他方法,但再次感谢您的评论。@Alnitak,我注意到您的编辑。非常感谢。所以变量
friends
只是一个对象,与JSON无关?我见过其他类似这样的代码,人们称之为JSON,但我想肯定有一些不同。JSON是一种对象序列化格式,即,您得到的字符串看起来有点像JS对象文字(实际上是可以解析的)。至于你给出的另一个例子,这是一个恰当的用法,因为键是真正唯一的(而你的键似乎没有语义值),并且没有
position
元素,看起来应该只是数组偏移量。大多数情况下,如果你看到这样的结构,你做错了…@Alnitak谢谢你解决这个问题。我自己也没见过这种格式,但我遇到了一个基于中心位置计算距离的工具,我用他的代码构建了一个项目,在谷歌地图上放置多个标记。可能还有其他方法,但再次感谢您的评论。@Alnitak,我注意到您的编辑。非常感谢。所以变量
friends
只是一个对象,与JSON无关?我见过其他类似这样的代码,人们称之为JSON,但我想肯定有一些不同。JSON是一种对象序列化格式,即,您得到的字符串看起来有点像JS对象文字(实际上是可以解析的)。至于你给出的另一个例子,这是一个恰当的用法,因为键是真正唯一的(而你的键似乎没有语义值),并且没有
position
元素,看起来它应该只是一个数组偏移量。哦,是的,您需要使用
i
的值来获取密钥数组的值,然后将其用作friends对象的属性名。@Quentin,感谢您澄清您的原始答案。它现在可以工作了。@Quentin说真的,你把
Object.keys(friends)[i]
放在循环中,每次迭代调用
Object.keys
?!哦,是的,您需要使用
i
的值来获取密钥数组的值,然后将其用作friends对象的属性名。@Quentin,感谢您澄清您的原始答案。它现在可以工作了。@Quentin说真的,你把
Object.keys(friends)[i]
放在循环中,每次迭代调用
Object.keys
?!非常感谢您这么快的回复。这是可行的,但Aba的代码行数较少。不过,再次感谢你。我仍在学习这一点,因此看到多个解决方案来解决同一个问题是非常有帮助的。非常感谢您如此快速地做出响应。这是可行的,但Aba的代码行数较少。不过,再次感谢你。我仍在学习这一点,因此看到多个解决方案来解决同一个问题是非常有帮助的。我建议您使用
for。。在
中,哪种方法实际上是正确的,但您会因为hubris@Aba,