1

以下は、私のJSONデータですdiv

[{"Identifier":"1","Label":"10 Day","Categories":"Standard","UpdatedBy":"Lno","UpdatedAt":"01-02-2013","RefId":"0","ComType":"1","Cs":["944"],"AM":"Error Message","Message":"asdfasdf","Combiner":[{"uniqueID":"1","type":"7","rule":""}]}]

私はJSオブジェクトを介してアクセスしています:

var myArrayVar=JSON.parse(document.getElementById("populateDT").innerHTML);

この JS オブジェクトを反復処理したい。以下は私のコードですが、キー/値フィールドにアクセスしません:

for(var i=0; i<=myArrayVar.length;i++){
    for(var j=0; j<=myArrayVar.Combiner.length; j++){
        var sessionUniqueId= myArrayVar.Combiner[j].uniqueID;
        alert(sessionUniqueId);
        var sessionType=myArrayVar.Combiner[j].type;
        alert(sessionType);
        var sessionRule=myArrayVar.Combiner[j].rule;
        alert(sessionRule);
    }
}

誰でも解決策を提案できますか?

4

5 に答える 5

2

あなたは決して使用しませんi。たとえば、現在の配列要素にアクセスするために必要です。

for(var j=0; j<=myArrayVar[i].Combiner.length; j++){

myArrayVarは配列、myArrayVar[i]iその配列の 番目の要素、は 番目の要素myArrayVar[i].Combinerのコンバイナー (配列) プロパティですi

現在の要素にも名前を付けると、はるかに簡単になります。(あなたはおそらく、something のような一般的ではない名前を思いつきたいと思うでしょうcurrent。)

for(var i=0; i<myArrayVar.length;i++){
    var current=myArrayVar[i];
    for(var j=0; j<current.Combiner.length; j++){
        var sessionUniqueId=current.Combiner[j].uniqueID;
        alert(sessionUniqueId);
        var sessionType=current.Combiner[j].type;
        alert(sessionType);
        var sessionRule=current.Combiner[j].rule;
        alert(sessionRule);
    }
}

また、そのインデックスが既に範囲外であるため、i等しいことはできません。myArrayVar.lengthループ条件には<代わりに が必要です<=

于 2013-06-19T21:44:48.387 に答える
2

1 つの要素を持つ配列があります。その要素が入っmyArrayVar[0]ていて、それはオブジェクトです。オブジェクトを反復するには、for ... inループを使用します。

var myObj = myArrayVar[0];
for(var key in myObj){
    var value = myObj[key];
    console.log(key, value);
}

また、デバッグにはconsole.logを使用する必要があります。オブジェクトに関するアラートよりも多くの情報が表示されます。

于 2013-06-19T21:44:57.533 に答える
1

私が見るいくつかの問題があります。まず、変数ij変数が 1 つ行き過ぎています。<の代わりに使用する必要があり<=ます。

次に、ループ内で変数を宣言しています。それは問題ありませんが、JavaScript はブロック スコープではないため、同じ 3 つの変数がリスト内の項目の数だけ相互に上書きすることになります。サンプル データには項目が 1 つしかないため、おそらくまだ上書きの問題に気付かないでしょうが、リストに項目が複数あると問題になる可能性があります。

于 2013-06-19T21:45:46.890 に答える
1

for ループで「<=」の代わりに「<」を使用し、「myArrayVar.Combiner」の代わりに「myArrayVar[i].Combiner」を使用してみてください。

于 2013-06-19T21:43:56.607 に答える