访问“for in”循环中的子对象?

时间:2012-02-07 16:58:33

标签: javascript html5-canvas

以下是我想要实现的一些示例代码:

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速度。

如何让代码返回paddleApaddleB的速度值?

注意: 这只是类似于我的实际代码的演示,因此我没有太大的空间来重新调整我存储和访问我的值的方式。

5 个答案:

答案 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)

DEMO

您希望遍历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)

这是一个简单的层次结构,不需要循环。