以下是div
中的JSON数据:
[{"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);
}
}
有人可以建议解决方案吗?
答案 0 :(得分:2)
您永远不会使用i
。您需要它来访问当前数组元素,例如:
for(var j=0; j<=myArrayVar[i].Combiner.length; j++){
myArrayVar
是您的数组,myArrayVar[i]
是该数组中的i
个元素,myArrayVar[i].Combiner
是i
的组合(数组)属性-th element。
如果你给当前元素一个名字,你会自己做得更容易。 (你可能想要提出一个不太通用的名称,例如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
,因为该索引已经超出范围。您的循环条件应为<
而不是<=
。
答案 1 :(得分:2)
你有一个包含一个元素的数组。该元素位于myArrayVar[0]
中,它是一个对象。要迭代对象,请使用for ... in循环。
var myObj = myArrayVar[0];
for(var key in myObj){
var value = myObj[key];
console.log(key, value);
}
您还应该使用console.log进行调试。它将显示有关对象的更多信息,而不是警报。
答案 2 :(得分: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);
}
}
答案 3 :(得分:1)
尝试使用“&lt;”而不是for循环中的“&lt; =”和“myArrayVar [i] .Combiner”而不是“myArrayVar.Combiner”。
答案 4 :(得分:1)
我看到了一些问题。首先,您的i
和j
变量太过分了。他们应该使用<
而不是<=
。
其次,你在循环中声明变量。这很好,但JavaScript不是块作用域,所以你真的最终会使用相同的三个变量覆盖彼此,就像列表中的项目一样多次。您的示例数据只有一个项目,因此您可能还没有注意到覆盖问题 - 但是一旦列表中有多个项目,就可能出现问题。