访问嵌套数组元素。

时间:2013-09-22 05:08:03

标签: javascript json

我正在尝试访问位于数组内部的单元格中的元素,该元素位于另一个数组中。

我尝试了几种方法,但一切都返回未定义。

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);
}

不返回任何内容,包括第一个元素。 任何想法都会很棒,那就是。

1 个答案:

答案 0 :(得分:1)

您的数组有一个元素,它是一个对象,因此filter[0]会为您提供该对象。

该对象有两个属性,assignmentcell,因此filter[0].assignment为您提供“Tom”,filter[0].cell为您提供内部数组。

内部数组中包含filter[0].cell.length项,第一项是filter[0].cell[0],第二项是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的代码无效,因为您无法通过数字索引访问对象属性,除非实际属性名称是数字,并且在任何情况下您都不希望{ {1}}结尾。