我有一个对象(从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,但m
和m0
都返回:
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时,它将永远不会出现)。
答案 0 :(得分:2)
您应该使用data.materials["1"].name
雅各布,我看到你更新了你的问题。
要使用变量,只需拨打data.materials[your_variable_here].name
答案 1 :(得分:0)
您尝试过:data.materials[1].name
?
但在我看来,使用数字作为属性名称会产生误导。