Javascript 使用jQuery从表创建数组

Javascript 使用jQuery从表创建数组,javascript,jquery,html,Javascript,Jquery,Html,我希望使用jQuery从带有和的表中创建一个数组 我想要的结果是 [[33年1月20日],[44年1月21日],[5年1月22日],[17年1月23日] 我的桌子如下 <table class="" id="bookedTable" border="1"> <thead> <tr> <th>Date</th> <th>20th jan</th> <th

我希望使用jQuery从带有
的表中创建一个数组

我想要的结果是

[[33年1月20日],[44年1月21日],[5年1月22日],[17年1月23日]

我的桌子如下

<table class="" id="bookedTable" border="1">
<thead>
    <tr>
        <th>Date</th>
        <th>20th jan</th>
        <th>21st jan</th>
        <th>22nd jan</th>
        <th>23rd Jan</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>Name</td>
        <td>33</td>
        <td>44</td>
        <td>5</td>
        <td>17</td>
    </tr>
</tbody>
$(function() {
var $table = $("#bookedTable"),
  $headerCells = $table.find("thead th"),
  $rowCells = $table.find("tbody tr td");

var headers = [],
  rows = [];

$headerCells.each(function(k,v) {
 headers[headers.length] = $(this).text();
});

$rowCells.each(function(k,v) {
 rows[rows.length] = $(this).text();
});

console.log(headers);
console.log(rows);
});
我只知道如何分别对标题和行进行控制台日志记录,而不是根据上面我想要的结果将它们合并到一个数组中。寻找一些帮助来解决


您不必单独选择标题(这将替换整个代码):


您不必单独选择标题(这将替换整个代码):

var组合=[];
对于(变量i=1;i<$headerCells.length;i++){
组合.push([$($headerCells[i]).text(),$($rowCells[i]).text());
}
请看这里:

var组合=[];
对于(变量i=1;i<$headerCells.length;i++){
组合.push([$($headerCells[i]).text(),$($rowCells[i]).text());
}
请看这里:

JS小提琴:

jsfiddle:

试试这个

$(function() {
   var rows = [];
   $('tbody tr td').each(function(k,v) {
     if(k>0)
          rows.push([ $('thead th:eq('+k+')').text(),$(this).text()]);
   });
   alert(rows.toSource());
});
这是工作方法

试试这个

$(function() {
   var rows = [];
   $('tbody tr td').each(function(k,v) {
     if(k>0)
          rows.push([ $('thead th:eq('+k+')').text(),$(this).text()]);
   });
   alert(rows.toSource());
});
这是工作票


非常好的代码,不过有一个建议。您可以将索引作为第二个参数传递给
map
函数,这样就不需要
$(el).index()
@KevinBowersox-这是真的,我在键入时没有想到这一点。补充!非常感谢,这是一段很好的代码。我刚刚意识到的一件事是,由于没有返回日期对象,我的代码现在已经失效了。在数组中(很抱歉,我知道这是一个加法)是否可以将th中的date字段作为数组中的date对象返回?感谢并对迟来的跟进表示歉意。这听起来不像是一个糟糕的运动,因为正确的答案被拿走了,但这不只是一个jQuery练习答案吗?使用标准JS进行循环和数组推送同样容易阅读,而且效率更高。并不是说这不是一个好代码,但每件事都有其复杂性。@Redwall-你可以自由选择你喜欢的答案,这完全取决于你,别担心。有时候,当你匆忙发布一个答案,然后十分钟后发布的答案被接受时,这会有点烦人,但同样,你是选择答案的人,任何适合你的答案都是正确的答案。非常好的代码,尽管有一条建议。您可以将索引作为第二个参数传递给
map
函数,这样就不需要
$(el).index()
@KevinBowersox-这是真的,我在键入时没有想到这一点。补充!非常感谢,这是一段很好的代码。我刚刚意识到的一件事是,由于没有返回日期对象,我的代码现在已经失效了。在数组中(很抱歉,我知道这是一个加法)是否可以将th中的date字段作为数组中的date对象返回?感谢并对迟来的跟进表示歉意。这听起来不像是一个糟糕的运动,因为正确的答案被拿走了,但这不只是一个jQuery练习答案吗?使用标准JS进行循环和数组推送同样容易阅读,而且效率更高。并不是说这不是一个好代码,但每件事都有其复杂性。@Redwall-你可以自由选择你喜欢的答案,这完全取决于你,别担心。有时候,当你争先恐后地发布一个答案,然后十分钟后发布的答案被接受时,这会有点烦人,但同样,你是选择答案的人,任何适合你的答案都是正确的答案。
var myArr = [];
$("table thead tr th").each(function(i){
    if(i != 0){
        var colValue = $("table tbody tr td").eq(i).text();
        myArr.push([this.innerHTML, colValue]);
    }
});
$(function() {
   var rows = [];
   $('tbody tr td').each(function(k,v) {
     if(k>0)
          rows.push([ $('thead th:eq('+k+')').text(),$(this).text()]);
   });
   alert(rows.toSource());
});
var arr = $.map($('#bookedTable th:not(:first)'), function(el,i) {
    return [[$(el).text(), $('#bookedTable td:eq('+i+')').text()]];
});