class CustomTable
{
constructor(div_id, headings) {
this.div = div_id;
this.header_titles = headings;
this.item_list = new Array();
var _this = this;
this.add_item = function(items)
{
_this.item_list.push(items);
console.log(_this.item_list);
}
this.remove_item = function(item_index)
{
_this.item_list.splice(item_index, 1);
console.log(_this.item_list);
}
this.drawTable = function()
{
var t = "<table class='table' style='width:100%'>";
t += "<thead>";
t += " <tr>";
t += " <th>#</th>";
for (var i = 0; i < _this.header_titles.length; i++)
{ t += "<th>" + _this.header_titles[i] + "</th>"; }
t += " <th>Add</th>";
t += " </tr>";
t += "</thead>";
t += "<tbody>";
for (var i = 0; i < _this.item_list.length; i++)
{
t += "<tr>";
t += "<td>" + i + "</td>";
console.log(i);
var subitem_count = _this.item_list[i].length;
// ^^^^^^^^^^^^^^^^^^
// This errors out: TypeError undefined
for (var j = 0; j < subitem_count; i++)
{
t += "<td>" + _this.item_list[i][j] + "</td>"
}
t += "</tr>"
}
t += "</tbody>";
t += "</table>";
document.getElementById(_this.div).innerHTML = t;
}
}
}
var ct = new CustomTable("server_list",["Server Name","IP Address", "RAM in GB"]);
ct.add_item(["QMM-TRGEXCH01","192.168.0.225","2GB"]);
ct.add_item(["QMM-SRCEXCH01","192.168.0.226","2GB"]);
ct.add_item(["QMM-TRGAGENT01","192.168.0.227","2GB"]);
ct.add_item(["QMM-SRCAGENT01","192.168.0.228","2GB"]);
ct.add_item(["QMM-MIGCONSOLE","192.168.0.229","2GB"]);
ct.drawTable();
我到处搜索,无法弄清楚为什么Javascript会出错。变量在范围内,我已使用
进行了检查_this.item_list [i] .constructor === Array
它是一个数组。
我在第一次迭代时遇到此错误。
的console.log(ⅰ); // i = 0时出错
所以它不是代码迭代超出范围。这也可能是代码的问题,但还有其他问题。请看一下小提琴,我已经更新了它并从所有for循环中删除了=但我仍然得到同样的错误。
答案 0 :(得分:2)
这是因为您尝试在不可用索引处的元素上调用方法。
for (var i = 0; i <= _this.item_list.length
应该是
for (var i = 0; i < _this.item_list.length
数组越界问题 - 您正尝试访问6
undefined
处的元素
根据您的逻辑,如果它们是_this.item_list
中的5个元素,那么您将在索引0, 1, 2, 3, 4, 5
处迭代元素,但是您应该只迭代到4
,因为索引从{{1}开始而不是0
您必须将1
中<=
的所有实例替换为for-loop
你的内循环也有一个错误。
<
应该是
for (var j = 0; j < subitem_count; i++)
你应该在内循环中递增 for (var j = 0; j < subitem_count; j++)
而不是j
。
<强> Check Fiddle 强>