2017-10-14 101 views
1

我試圖根據搜索條件解析下面的值,然後將結果打印到表中。我能夠正確解析所需的結果以控制檯或將所有結果打印到表格中。以下是我嘗試合併這兩個函數。我結束了一個類型錯誤TypeError: obj.list[i].forEach is not a function。從搜索中,我相信這是因爲它是一個對象,而不是一個數組,雖然無法正確解析對象。我如何糾正這個問題才能正確解析對象?解析對象時TypeError對象不是函數

var obj = { 
 
    "list": [{ 
 
     "name": "my Name", 
 
     "id": 12, 
 
     "type": "car owner" 
 
    }, 
 
    { 
 
     "name": "my Name", 
 
     "id": 13, 
 
     "type": "car owner2" 
 
    }, 
 
    { 
 
     "name": "my Name4", 
 
     "id": 14, 
 
     "type": "car owner3" 
 
    }, 
 
    { 
 
     "name": "my Name4", 
 
     "id": 15, 
 
     "type": "car owner5" 
 
    } 
 
    ] 
 
}; 
 

 
var tableBody = ""; 
 

 
var columns = []; 
 

 
// Create the header record. 
 
tableBody = tableBody + "<tr>"; 
 
for (var prop in obj.list[0]) { 
 
    if (obj.list[0].hasOwnProperty(prop)) { 
 
    // Append properties such as myid, fname, lname etc. 
 
    tableBody = tableBody + ("<th>" + prop + "</th>"); 
 

 
    // Also keep a list of columns, that can be used later to get column values from the 'data' object. 
 
    columns.push(prop); 
 
    } 
 
} 
 
tableBody = tableBody + "</tr>"; 
 

 
var results = []; 
 
var searchField = "name"; 
 
var searchVal = "my Name"; 
 
for (var i = 0; i < obj.list.length; i++) { 
 
    // search term 
 
    if (obj.list[i][searchField] == searchVal) { 
 
    // Create the data rows. 
 
    // I get an error here: 
 
    obj.list[i].forEach(function(row) { 
 
     // Create a new row in the table for every element in the data array. 
 
     tableBody = tableBody + "<tr>"; 
 

 
     columns.forEach(function(cell) { 
 
     // Cell is the property name of every column. 
 
     // row[cell] gives us the value of that cell. 
 
     tableBody = tableBody + "<td>" + row[cell] + "</td>"; 
 
     }); 
 

 
     tableBody = tableBody + "</tr>"; 
 
    }); 
 
    } 
 
} 
 

 
jQuery("#usersTable").append(tableBody);
<table border='1' id="usersTable"></table>

JSFiddle

Working version based on feedback

+3

'obj.list(我)'應該是'obj.list [I]'。你現在將它作爲函數調用,而不是訪問屬性 – Pevara

+0

我用更正的語法更新了問題。 – Astron

+2

你想用'obj.list [i] .forEach'完成什麼? 'obj.list'是對象列表,而不是列表列表。只是'var row = obj.list [i]',也許? – Ryan

回答

0

forEach是迭代法陣,在提供的代碼你試圖將此方法應用於對象,這是一個錯誤的方式。要遍歷對象屬性,您可以使用for (var key in object) {"code here"}。我已經糾正代碼:

var obj = { 
 
    "list": [{ 
 
     "name": "my Name", 
 
     "id": 12, 
 
     "type": "car owner" 
 
    }, 
 
    { 
 
     "name": "my Name", 
 
     "id": 13, 
 
     "type": "car owner2" 
 
    }, 
 
    { 
 
     "name": "my Name4", 
 
     "id": 14, 
 
     "type": "car owner3" 
 
    }, 
 
    { 
 
     "name": "my Name4", 
 
     "id": 15, 
 
     "type": "car owner5" 
 
    } 
 
    ] 
 
}; 
 

 
var tableBody = ""; 
 
var columns = []; 
 
var searchField = "name"; 
 
var searchVal = "my Name"; 
 

 
tableBody = tableBody + "<tr>"; 
 
for (var prop in obj.list[0]) { 
 
    if (obj.list[0].hasOwnProperty(prop)) { 
 
    tableBody = tableBody + ("<th>" + prop + "</th>"); 
 
    columns.push(prop); 
 
    } 
 
} 
 

 
tableBody = tableBody + "</tr>"; 
 

 
for (var i = 0; i < obj.list.length; i++) { 
 
    if (obj.list[i][searchField] == searchVal) { 
 
    tableBody = tableBody + "<tr>"; 
 
    for (var key in obj.list[i]) { 
 
     tableBody = tableBody + "<td>" + obj.list[i][key] + "</td>"; 
 
    }; 
 
    tableBody = tableBody + "</tr>"; 
 
    } 
 
} 
 

 
jQuery("#usersTable").append(tableBody);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table border='1' id="usersTable"></table>

+0

你測試了你的代碼嗎?生成一個表格,但單元格未定義,雖然我可能會丟失一些東西。 – Astron

+0

@Astron,我明天再看一遍,現在我需要睡覺;) –

+0

@Astron,我已經更新了答案,查看了一下 –

相關問題