Javascript无法访问对象的属性

时间:2012-08-15 19:57:03

标签: javascript json

我有一个对象(从jQuery ajax返回),如下所示:

data:{
    materials:{
        1:{
            id:1,
            name:"jacob"
        }//1 (some integer)
    }//materials
}//data

我正在尝试访问name,但我无法通过对象1。我尝试使用makeArray()这样的

var m  = $.makeArray(data.materials);
var m0 = m.shift();
console.log(m);
console.log(m0);

$isArray(m)& $.isArray(m0)返回true,但mm0都返回:

1:{
    id:1,
    name:"jacob"
}//1 (some integer)

我希望shift()返回1内的对象。

当我尝试访问m0.name时,它返回undefined,当我尝试访问m[1]时,它返回undefined。

btw data.materials["1"].name有效。问题是1是可变的(我不知道它会是什么,所以我想使用shift(),这对某个对象无效。)

编辑:因此似乎makeArray()内存在限制:由于对象属性不应该用数字命名,因此该函数不会转换其余部分对象和输出是某种对象 - 数组混合(你不能使用像shift()这样的数组函数),所以我遇到的快速解决方法是通过它循环:

var m = data.materials,
    id;
for ( key in m ) { id = key; }
console.log( m[id].name );

这不是那么干净,所以如果有更好的方法,请告诉我。

P.S。 1:{}首先存在,因为控制器在某些条件下返回多个“材料”(当使用这个js时,它将永远不会出现)。

2 个答案:

答案 0 :(得分:2)

您应该使用data.materials["1"].name

http://jsfiddle.net/nq4RE/

雅各布,我看到你更新了你的问题。

要使用变量,只需拨打data.materials[your_variable_here].name

即可

http://jsfiddle.net/nq4RE/1/

答案 1 :(得分:0)

您尝试过:data.materials[1].name

但在我看来,使用数字作为属性名称会产生误导。