以下是我想要实现的一些示例代码:
pingpong = {
paddleA: {
speed: 5,
},
paddleB: {
speed: 6,
},
paddleAI: {
AI1: "paddleA",
AI2: "paddleB"
}
}
paddleAI = pingpong.paddleAI;
paddleA = pingpong.paddleA;
paddleB = pingpong.paddleB;
for (paddle in paddleAI) {
document.write(paddleAI[paddle].speed);
}
当我运行此代码时,它返回“undefined”
我正在尝试使用paddleAI
中的文本值作为我想要访问的paddle速度。
如何让代码返回paddleA
和paddleB
的速度值?
注意: 这只是类似于我的实际代码的演示,因此我没有太大的空间来重新调整我存储和访问我的值的方式。
答案 0 :(得分:2)
这可能就是你所追求的......
使用pingpong.paddleAI
的内容告诉您哪些拨片可用...
你的问题是你在循环中使用paddle
期望paddle名称,而实际上你得到了属性名称(ex ... AI1
)
https://stackoverflow.com/a/5263872/555384
for (paddle in paddleAI) {
document.write(pingpong[paddleAI[paddle]].speed);
}
虽然这似乎是非常糟糕的方式......
此外,您的尾随逗号将使IE抛出适合...删除对象/数组文字声明中的最后一个逗号
答案 1 :(得分:1)
您希望遍历pingpong.paddleAI
的密钥,而不只是paddleAI
。此外,您想要获取paddleAI
属性的值,而不是密钥
for (paddle in pingpong.paddleAI) {
var keyVal = pingpong.paddleAI[paddle];
if (pingpong[keyVal].speed)
console.log(pingpong[keyVal].speed);
else //if you want
console.log("no speed on " + keyVal);
}
答案 2 :(得分:1)
想想你之后的事情:
pingpong = {
paddleA: {
speed: 5,
},
paddleB: {
speed: 6,
},
paddleAI: {
AI1: "paddleA",
AI2: "paddleB",
},
}
for (paddle in pingpong.paddleAI) {
document.write(pingpong[pingpong.paddleAI[paddle]].speed);
}
答案 3 :(得分:1)
您的初始参考已关闭。此外,paddle将引用该对象,但您需要该值(这实际上是一个键)。代码比单词更响亮:(jsFiddle demo)
var pingpong = {
paddleA: {
speed: 5,
},
paddleB: {
speed: 6,
},
paddleAI: {
AI1: "paddleA",
AI2: "paddleB",
},
}
//reference paddleAI
var pAI = pingpong.paddleAI;
for (paddle in pAI) {
//here paddle reference AI1 or AI2 but we want its value
var key = pAI[paddle];
//and on top of that its value is a reference to the key we really want
var paddleRef = pingpong[key];
document.write(paddleRef.speed);
}
答案 4 :(得分:0)
alert(pingpong.paddleA.speed)
alert(pingpong.paddleb.speed)
这是一个简单的层次结构,不需要循环。