次のようなオブジェクト(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が返されます。
ところでdata.materials["1"].name
動作します。問題は1
可変です(それがどうなるかわからないのでshift()
、オブジェクトで機能しないものを使用したかったのです)。
編集:それで、内に制限があるようですmakeArray()
:オブジェクトプロパティは数字で名前が付けられるべきではないので、その関数はオブジェクトの残りの部分を変換せず、出力はある種のオブジェクト-配列ハイブリッドです( )のような配列関数を使用することはできないshift()
ので、私が思いついたクイックアンドダーティソリューションは、次のようにループすることでした。
var m = data.materials,
id;
for ( key in m ) { id = key; }
console.log( m[id].name );
それほどきれいではないので、もっと良い方法があれば教えてください。
ps1:{}
コントローラーが特定の条件下で複数の「マテリアル」を返すため、そもそもそこにあります(これは、このjsが使用されている場合は決して当てはまりません)。