Javascript 通过遍历表行创建对象数组
我有一个HTML表,我想遍历它的行,创建一个集合,或者说一个“对象数组” 例如:Javascript 通过遍历表行创建对象数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个HTML表,我想遍历它的行,创建一个集合,或者说一个“对象数组” 例如: 用户ID 用户名 1. 测试1 我建议您稍微更改一下html <table id="tbPermission"> <tr> <th>User ID</th> <th>User Name</th> </tr> <tr> <td class="
用户ID
用户名
1.
测试1
我建议您稍微更改一下html
<table id="tbPermission">
<tr>
<th>User ID</th>
<th>User Name</th>
</tr>
<tr>
<td class="userid">1</td>
<td class="username">Test1</td>
</tr>
</table>
这将在表中找到所有具有类userid的元素,只收集值,并使用.toArray()获得基本javascript数组。然后,您可以将其转换为您想要的任何json结构,或者您也可以在map函数中创建json对象。试试下面的代码
var trArray = [];
$('#tbPermission tr').each(function () {
var tr =$(this).text(); //get current tr's text
var tdArray = [];
$(this).find('td').each(function () {
var td = $(this).text(); //get current td's text
var items = {}; //create an empty object
items[tr] = td; // add elements to object
tdArray.push(items); //push the object to array
});
});
在这里,我刚刚创建了一个空对象,用tr和td的引用填充对象,并将该对象添加到最终数组中
添加工作基于给定的结构,这有点棘手。您可能需要稍微修改HTML以将单元格映射到标题,如下所示
var myArray=[];
$(“#tbPermission”).find(“td”).each(function(){
var$this=$(this),obj={};
obj[$this.data(“column”)]=$this.text();
myArray.push(obj);
});
警报(JSON.stringify(myArray))代码>
用户ID
用户名
1.
测试1
检查控制台,您将获得一个包含所需对象的数组
var arr=[];
$('#tbtr:not(.header)')。每个(函数(){
var,该值=$(此值);
var id=that.find('td').eq(0.text();
var name=that.find('td').eq(1).text();
var obj={'userId':id,'userName':name};
方位推力(obj);
});
控制台日志(arr)代码>
用户ID
用户名
1.
测试1
2.
测试2
此解决方案依赖于添加thead
和tbody
元素,这是一个好主意,因为它向浏览器表明该表实际上是一个“数据”表,而不是表示性的
jQuery有一个函数map
是一个基本函数,在该函数中,您获取一个数组,然后用回调函数的返回值替换这些值,从而生成一个新数组
$([1,4,9]).map(function(){ return Math.sqrt(this) });
// [1, 2, 3]
.toArray
将我们得到的类似jQuery对象的数组转换为“真数组”
jQuery(函数(){
var$table=$(“#tbPermission”);
var headers=$table.find('thead-th').map(函数(){
返回$(this.text().replace(“”,”);
});
var rows=$table.find('tbody tr').map(函数(){
var result={};
var values=$(this.find('>td').map(function()){
返回$(this.text();
});
//使用标题作为键,使用td值作为值
对于(变量i=0;i
用户ID
用户名
1.
测试1
push()
本身不会推送任何东西,您需要显式推送一个空对象:push({})
那么有什么问题,您不知道如何编写推送命令吗?你是这么问的吗?可能是tdArray.push($(this.html())吗?为什么需要数组?您可以将类分配给th和td,并在需要时找到所需的内容。不确定您试图解决的问题。本质上,我觉得你为自己制造了一个问题,现在却很难找到解决方案,而不是一开始就不制造问题。谢谢你的回答,我只想从表的所有单元格创建一个对象数组,因为我有trArray。或者,如果有人能提出任何想法来实现这一点?这比其他解决方案要长一点,但适用于表中的任何列数。
$([1,4,9]).map(function(){ return Math.sqrt(this) });
// [1, 2, 3]