解析对象时TypeError对象不是函数
我试图根据搜索条件解析下面的值,然后将结果打印到表中。我能够正确解析所需的结果以控制台或将所有结果打印到表格中。以下是我尝试合并这两个函数。我结束了一个类型错误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>
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>
你测试了你的代码吗?生成一个表格,但单元格未定义,虽然我可能会丢失一些东西。 – Astron
@Astron,我明天再看一遍,现在我需要睡觉;) –
@Astron,我已经更新了答案,查看了一下 –
'obj.list(我)'应该是'obj.list [I]'。你现在将它作为函数调用,而不是访问属性 – Pevara
我用更正的语法更新了问题。 – Astron
你想用'obj.list [i] .forEach'完成什么? 'obj.list'是对象列表,而不是列表列表。只是'var row = obj.list [i]',也许? – Ryan