0

別の配列内にある、配列内のセルにある要素にアクセスしようとしています。

いくつかの方法を試しましたが、すべてが未定義を返します。

json:

[
 {"assignment":"Tom" , "cell":["Tom", "2013-10-06", "Client 3", "Activity", "Scheduled" ]}
]

jquery:

$.getJSON('data/gridData1.json',function(json){
                var grid = json;
                filterGrid(grid, ele);
            });

このコードは完全に問題なく配列を返します。

JavaScript:

function filterGrid(filter, ele){
var types = ['Activity','Alert','Lead','Notification'];
var newTable = [];
var cs1 = $("option:selected", ele).attr("class");
var option = $("select[name='datagrid_filter'] option:selected").text().trim();
if(cs1 == 'type'){
    for(var i = 0; i < types.length; i++){
        if(types[i]==option){
            for(var k = 0; k < filter.length; k++){
                if(**filter[0][0][0].value==option**){
                        newTable.push(filter[k]);
                    }
                }
                break;
            }
        }
    }
buildGrid(newTable);
}

最初の要素を含め、何も返しません。どんなアイデアでも素晴らしいでしょう、それ。

4

1 に答える 1

1

配列にはオブジェクトである1つの要素があるため、filter[0]そのオブジェクトが得られます。

そのオブジェクトにはassignmentとの 2 つのプロパティがcellあるため、filter[0].assignment"Tom"filter[0].cellが返され、内側の配列が返されます。

内側の配列にはfilter[0].cell.length項目があり、最初の項目はfilter[0].cell[0]、2 番目の項目はfilter[0].cell[1]などです。

内側の配列のアイテムを反復処理するには、次のようにします。

for(var k = 0; k < filter[0].cell.length; k++){
    if(filter[0].cell[k]==option){
        newTable.push(filter[0].cell[k]);
        break;
    }
}

filter[0].cell...しかし、どこでも繰り返すのはちょっと面倒なので、内部配列への参照である別の変数を追加できます。

var cell = filter[0].cell;
for(var k = 0; k < cell.length; k++){
    if(cell[k]==option){
        newTable.push(cell[k]);
        break;
    }
}

filter[0][0][0].value実際のプロパティ名が数値である場合を除き、数値インデックスでオブジェクト プロパティにアクセスできないため、使用しようとしたコードは機能しませんでした。いずれにせよ.value、最後のビットは必要ありません。

于 2013-09-22T14:18:45.293 に答える