从表文本创建多维数组

时间:2013-02-28 17:06:07

标签: jquery arrays multidimensional-array html-table

我正在尝试将<table>中的文本作为文本数组放入数组中。

示例HTML:

<table class="sort">
    <caption>Census Data</caption>
    <tr>
        <th class="alpha">First Name:</th>
        <th class="alpha">Last Name:</th>
        <th class="date">Date of Birth:</th>
        <th class="numeric">Age:</th>
        <th class="alpha">Gender:</th>
    </tr>
    <tr>
        <td>Peter</td>
        <td>Parker</td>
        <td>12/23/1975</td>
        <td>36</td>
        <td>Male</td>
    </tr>
    <tr>
        <td>John</td>
        <td>Doe</td>
        <td>06/09/1982</td>
        <td>30</td>
        <td>Male</td>
    </tr>
</table>

最终目标是拥有这样的数组:

var array = [
             ["Peter", "Parker", "12/23/1975", "36", "male"], 
             ["John", "Doe", "06/09/1982", "30", "male"]
            ];

这就是我现在所拥有的,我的问题似乎是内部返回,当它到达外部地图时实际上并不是一个数组。当我alert(innerArray.toString());它给了我逗号分隔的字符串,好像它是一个字符串里面,但在外面它似乎join数组成一个而不是使它多维。

var outerArray = $(".sort tr").not(":first-child").map(function(){
    var innerArray = $(this).children().map(function(){
       return $(this).text();
    }).toArray();           
    return innerArray;
}).toArray();

2 个答案:

答案 0 :(得分:2)

使用地图可能有一些奇特的方式,但我更喜欢通过each循环,因为它更容易理解和维护。

var resultArray = [];

$(".sort tr").not(":first-child").each(function () {
    var innerArray = [];

    $(this).find('td').each(function () {
        innerArray.push($(this).text());
    });

    resultArray.push(innerArray);
});

Working example

答案 1 :(得分:0)

试试这个:

var outerArray = new Array() ;

$('.sort').children('tr').each(function(i,elem) {
     outerArray.push(elem.children('td')) ;
});