2017-01-04 9 views
1
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(); 

Please view this JSFiddle왜 내 javascript 코드가 TypeError를 반환하지 않습니까?

나는 모든 곳에서 검색 한 자바 스크립트가 밖으로 erroring 유지 이유를 알아낼 수 없습니다. 이 변수는 범위 내가

_this.item_list [I] .constructor === 어레이를 이용하여 확인하고 그 배열이다.

첫 번째 반복에서이 오류가 발생합니다.

console.log (i); // i = 0 at error

그래서 코드가 범위를 벗어나지 않습니다. 코드에 문제가있을 수 있지만 다른 문제가 있습니다. 바이올린을보고, 내가 그것을 업데이 트하고 = 모든 루프에서 제거하지만 여전히 같은 오류가 발생합니다.

답변

2

사용할 수없는 색인에있는 요소에서 메소드를 호출하려고하기 때문입니다.

for (var i = 0; i <= _this.item_list.length 

가 경계 문제 중

for (var i = 0; i < _this.item_list.length 

배열 있어야하는데 - 그들이 경우에 당신은 당신의 논리 당으로 undefined

입니다 인덱스 6에있는 요소를 액세스하려고 _this.item_list에있는 요소가 5 개있는 경우 인덱스 0, 1, 2, 3, 4, 5에 요소를 반복하고 있지만 색인 스타로 4 개까지만 반복해야합니다. 0에서 TS하지 1

당신은 for-loop

<에 또한 내부 루프는 버그가 당신에 <=의 모든 인스턴스를 교체해야합니다.

for (var j = 0; j < subitem_count; i++) 

당신은 내부 루프에 j하지 i를 증가해야

for (var j = 0; j < subitem_count; j++) 

있어야. 뿐만 아니라 문제가 될 수 있지만 여전히 심지어 =을 제거한 후이 오류를 얻을 수 있습니다

Check Fiddle

+0

. 또한이 오류가 발생하면 여전히 for 루프의 첫 번째 반복입니다. 나는 여전히 0입니다. – ultimal

+0

@ultimal 업데이트 된 게시물을 확인하십시오. –

+0

고마워요! 고맙습니다! 고맙습니다! 그거였다! – ultimal