0

我有一个看起来像这样的对象(从 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)返回真,但m两者m0都返回:

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

我希望这shift()能返回1.

当我尝试访问m0.name时返回未定义,当我尝试访问m[1]时返回未定义。

顺便说一句data.materials["1"].name有效。问题是1可变的(我不知道它会是什么,所以我想使用shift()对对象不起作用的)。

编辑:所以似乎有一个限制makeArray():由于对象属性不应该用数字命名,因此该函数不会转换对象的其余部分,并且输出是某种对象数组混合(在你不能使用像shift())这样的数组函数,所以我想到的快速n脏解决方案是像这样循环遍历它:

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

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

ps1:{}之所以存在,是因为控制器在某些条件下会返回多个“材质”(使用此js时永远不会为真)。

4

2 回答 2

2

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

http://jsfiddle.net/nq4RE/

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

要使用变量,您只需调用data.materials[your_variable_here].name

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

于 2012-08-15T20:01:37.207 回答
0

你试过:data.materials[1].name

但在我看来,使用数字作为属性名称具有误导性。

于 2012-08-15T20:02:13.367 回答