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)trueを返しますがmm0両方とも次を返します。

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が使用されている場合は決して当てはまりません)。

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 に答える