javascript 中带有表输出的嵌套 for 循环的问题
Issues with nested for loop with table output in javascript
var data = {
"categories":[
"Early Years (RA)",
"Primary schools (RA)",
"Secondary schools (RA)",
"Special schls and alter prov (RA)",
"Post-16 provision (RA)",
"Other edu and community budget (RA)",
"TOTAL EDUCATION SERVICES (RA)"
],
"series":[
{
"name":"Buckinghamshire",
"data":[
50,
57.69,
80.77,
38.46,
38.46,
0,
57.69
]
},
{
"name":"North Yorkshire",
"data":[
23.08,
42.31,
84.62,
26.92,
96.15,
80.77,
65.38
]
}
],
"series2":[
{
"name":"Buckinghamshire",
"data":[
31445,
211906,
167363,
29322,
4520,
6827,
451383
]
},
{
"name":"North Yorkshire",
"data":[
24390,
180012,
176206,
26710,
16981,
50324,
474623
]
}
]
}
我编写了以下脚本来放置一个表
var json = JSON.stringify(data),
obj = JSON && JSON.parse(json) || $.parseJSON(json);
var catData = obj.categories;
var serData = obj.series;
var serData2 = obj.series2;
$("#chartProfileOutput").html(' ');
$("#chartProfileOutput").css('height', 'auto');
var tmp = "";
var ln = json.length;
tmp += '<table class="uk-table uk-table-striped default-table profile-table">'n';
tmp += '<thead>'n';
tmp += '<tr>'n';
tmp += '<th></th>'n';
for (var i = 0; i < serData2.length; i++) {
tmp += '<th>' + serData2[i]["name"] + '</th>'n';
}
tmp += '<tr>'n';
tmp += '</thead>'n';
for (var i = 0; i < serData2.length; i++) {
for (var j = 0; j < catData.length; j++) {
tmp += '<tr>'n';
tmp += '<td>' + catData[j] + '</td>'n';
tmp += '</tr>'n';
}
for (var k = 0; k < serData2[i].data.length; k++) {
tmp += '<td>' + serData2[i]['data'][k] + '</td>'n';
}
}
tmp += '</table>'n';
$("#chartProfileOutput").html(tmp);
但是我在嵌套 for 循环时遇到了问题,以便我可以连接 td 单元格。
我不希望类别重复。
演示:https://jsfiddle.net/zidski/2vu5rkav/
我试图实现的输出:https://jsfiddle.net/zidski/adomo46w/
好的,稍微改变了你的例子,你在这里看到: 小提琴
我基本上反转了嵌套的for
循环,以便它会循环一次类别,并且由于您的数据与您的类别匹配,因此我们可以使用内部循环中的外部i
来获取正确的数据。
//list categories once.
for (var i = 0; i < catData.length; i++) {
// make tr for each category.
tmp += '<tr>';
//first td is always the category in your tr but we'd repeat it within the nested loop so we don't want to do that.
tmp += '<td>' + catData[i] + '</td>';
//in here we loop through the data, append more TD's to the same TR.
for (var j = 0; j < serData2.length; j++) {
//here we add more td's to the same tr.
tmp += '<td>' + serData2[j]['data'][i] + '</td>';
}
//close tr for category
tmp += '</tr>';
}
这是有效的serData2.length
结果是2
这意味着在移动到下一个类别之前,将在同一类别中添加两个额外的td
。
完成后继续到下一个循环,因此它将等待内部循环创建具有相同i
值的两个td
元素。
在第一个类别迭代中,i
将等于 0
,嵌套循环也将从0
j
开始,但内部循环会继续运行,直到它完成处理完serData2
的每个元素,然后导致外部循环增加。
上面的结果增加了一些额外的解释,我希望你清楚,如果你需要一个更清晰的解释,我很乐意给出它,因为我可以想象这很令人困惑。
无论如何,我希望它对您有所帮助,但始终尝试了解正在发生的事情:)
var data = {
"categories":[
"Early Years (RA)",
"Primary schools (RA)",
"Secondary schools (RA)",
"Special schls and alter prov (RA)",
"Post-16 provision (RA)",
"Other edu and community budget (RA)",
"TOTAL EDUCATION SERVICES (RA)"
],
"series":[
{
"name":"Buckinghamshire",
"data":[
50,
57.69,
80.77,
38.46,
38.46,
0,
57.69
]
},
{
"name":"North Yorkshire",
"data":[
23.08,
42.31,
84.62,
26.92,
96.15,
80.77,
65.38
]
}
],
"series2":[
{
"name":"Buckinghamshire",
"data":[
31445,
211906,
167363,
29322,
4520,
6827,
451383
]
},
{
"name":"North Yorkshire",
"data":[
24390,
180012,
176206,
26710,
16981,
50324,
474623
]
}
]
};
var json = JSON.stringify(data),
obj = JSON && JSON.parse(json) || $.parseJSON(json);
var catData = obj.categories;
var serData = obj.series;
var serData2 = obj.series2;
$("#chartProfileOutput").html(' ');
$("#chartProfileOutput").css('height', 'auto');
var tmp = "";
var ln = json.length;
tmp += '<table class="uk-table uk-table-striped default-table profile-table">'n';
tmp += '<thead>'n';
tmp += '<tr>'n';
tmp += '<th></th>'n';
for (var i = 0; i < serData2.length; i++) {
tmp += '<th>' + serData2[i]["name"] + '</th>'n';
}
tmp += '<tr>'n';
tmp += '</thead>'n';
for (var j = 0; j < catData.length; j++) {
tmp += '<tr>'n';
tmp += '<td>' + catData[j] + '</td>'n';
for (var k = 0; k < serData2.length; k++) {
tmp += '<td>' + serData2[k]['data'][j] + '</td>'n';
}
tmp += '</tr>'n';
}
tmp += '</table>'n';
$("#chartProfileOutput").html(tmp);
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<div id="chartProfileOutput"></div>
for
循环嵌套错误。您只需遍历一次类别。
我对您的代码进行了一些更改。
老:
for (var i = 0; i < serData2.length; i++) {
for (var j = 0; j < catData.length; j++) {
tmp += '<tr>'n';
tmp += '<td>' + catData[j] + '</td>'n';
tmp += '</tr>'n';
}
for (var k = 0; k < serData2[i].data.length; k++) {
tmp += '<td>' + serData2[i]['data'][k] + '</td>'n';
}
}
新增功能:
for (var j = 0; j < catData.length; j++) {
// Get Category
tmp += '<tr>'n';
tmp += '<td>' + catData[j] + '</td>'n';
for (var i = 0; i < serData2.length; i++) {
// Get results
tmp += '<td>' + serData2[i].data[j] + '</td>'n';
}
tmp += '</tr>'n';
}
var data = {
"categories": [
"Early Years (RA)",
"Primary schools (RA)",
"Secondary schools (RA)",
"Special schls and alter prov (RA)",
"Post-16 provision (RA)",
"Other edu and community budget (RA)",
"TOTAL EDUCATION SERVICES (RA)"
],
"series": [{
"name": "Buckinghamshire",
"data": [
50,
57.69,
80.77,
38.46,
38.46,
0,
57.69
]
}, {
"name": "North Yorkshire",
"data": [
23.08,
42.31,
84.62,
26.92,
96.15,
80.77,
65.38
]
}],
"series2": [{
"name": "Buckinghamshire",
"data": [
31445,
211906,
167363,
29322,
4520,
6827,
451383
]
}, {
"name": "North Yorkshire",
"data": [
24390,
180012,
176206,
26710,
16981,
50324,
474623
]
}]
}
var json = JSON.stringify(data),
obj = JSON && JSON.parse(json) || $.parseJSON(json);
var catData = obj.categories;
var serData = obj.series;
var serData2 = obj.series2;
$("#chartProfileOutput").html(' ');
$("#chartProfileOutput").css('height', 'auto');
var tmp = "";
var ln = json.length;
tmp += '<table class="uk-table uk-table-striped default-table profile-table">'n';
tmp += '<thead>'n';
tmp += '<tr>'n';
tmp += '<th></th>'n';
for (var i = 0; i < serData2.length; i++) {
tmp += '<th>' + serData2[i]["name"] + '</th>'n';
}
tmp += '<tr>'n';
tmp += '</thead>'n';
for (var j = 0; j < catData.length; j++) {
tmp += '<tr>'n';
tmp += '<td>' + catData[j] + '</td>'n';
for (var i = 0; i < serData2.length; i++) {
tmp += '<td>' + serData2[i].data[j] + '</td>'n';
}
tmp += '</tr>'n';
}
tmp += '</table>'n';
$("#chartProfileOutput").html(tmp);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="chartProfileOutput"></div>
相关文章:
- 嵌套 For 循环以重置单选组
- 基于 Javascript 的嵌套 for 循环以及对象
- 获取嵌套 for 循环中的值 - node.js、javascript、redis、Q 库
- Javascript中嵌套for循环与数组函数的性能
- javascript在数组过滤器中嵌套for循环
- javascript 中带有表输出的嵌套 for 循环的问题
- Javascript中简单嵌套for循环的问题
- 嵌套For循环传递变量
- 为什么我的嵌套for循环中的代码没有被执行?
- 嵌套for循环和备用映射方法
- 在嵌套for循环中添加属性会导致每个父for循环的值相同
- 我怎样才能在不让第一个循环循环到第二个循环的情况下嵌套for循环呢?
- 嵌套for循环中的变量定义
- 如果element.getAttribute('class')发生变化,则退出嵌套for循环
- 如何用函数式风格实现嵌套For循环
- 数据绑定点击不工作在Chrome嵌套for循环
- Coffeescript翻译-嵌套for循环
- 嵌套for循环MongoDB中的Javascript异步
- 在对象中循环,并在数组中循环的嵌套for循环
- Javascript : 省略 在嵌套 For 循环中初始化