Javascript 通过遍历表行创建对象数组

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="

我有一个HTML表,我想遍历它的行,创建一个集合,或者说一个“对象数组”

例如:


用户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]