1

以下是我在 a 中的 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
for (var i = 0; i < myArrayVar.length; i++) {
    for (var j = 0; j < myArrayVar[i].Combiner.length; j++) {
        var sessionUniqueId = myArrayVar[i].Combiner[j].uniqueID;
        alert(sessionUniqueId);
        var sessionType = myArrayVar[i].Combiner[j].type;
        alert(sessionType);
        var sessionRule = myArrayVar[i].Combiner[j].rule;
        alert(sessionRule);
    }
}
于 2013-06-19T21:45:31.373 回答
2

你从不使用i. 您需要它来访问当前数组元素,例如:

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

myArrayVar是您的数组,myArrayVar[i]是该数组中的i第 -th 个元素,并且myArrayVar[i].Combiner是第 -th 个元素的组合器(数组)属性i

如果你也给当前元素一个名字,你自己会更容易。(您可能想想出一个不那么通用的名称,例如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

您有一个包含一个元素的数组。那个元素在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变量走得太远了。他们应该使用<而不是<=.

其次,您在循环内声明变量。这很好,但是 JavaScript 不是块作用域的,所以你最终会得到相同的三个变量相互覆盖的次数与列表中的项目一样多。您的示例数据只有一个项目,因此您可能还不会注意到覆盖问题——但是一旦列表中有多个项目,这可能是个问题。

于 2013-06-19T21:45:46.890 回答
1

尝试在 for 循环中使用“<”而不是“<=”,并使用“myArrayVar[i].Combiner”而不是“myArrayVar.Combiner”。

于 2013-06-19T21:43:56.607 回答