Javascript jQuery—有选择地将表数据存储到2d数组

Javascript jQuery—有选择地将表数据存储到2d数组,javascript,jquery,html,arrays,multidimensional-array,Javascript,Jquery,Html,Arrays,Multidimensional Array,我提出了将html表数据存储到2D数组的问题。我没有使用嵌套循环,而是寻找允许我执行相同操作的jquery函数。我找到了似乎能胜任这项工作的 var tRows = $('tr').map(function() { return [$(this).find('td').map(function() { return $(this).text() }).get()] }).get() console.log(tRows) 我想知道,如何在给定的代码中使用条件来检查tr的

我提出了将html表数据存储到2D数组的问题。我没有使用嵌套循环,而是寻找允许我执行相同操作的jquery函数。我找到了似乎能胜任这项工作的

var tRows = $('tr').map(function() {
    return [$(this).find('td').map(function() {
    return $(this).text()
    }).get()]
}).get()

console.log(tRows)
我想知道,如何在给定的代码中使用条件来检查
tr
的第一个
td
是否为空(或通常的其他条件),从而不将该行添加到最终数组中。

编辑:

阅读这些评论并在此基础上,我现在

var tRows = $('tr').map(function() {
  var arr = $(this).find('td').map(function() {
    return $(this).text()
  }).get();

  if (arr[0].length) return[arr]; 
}).get()

这在某种程度上是可行的,但我希望检查内部映射中的条件,并返回NULL而不是整个数组。从中,似乎无法中途中止内部映射调用,它将返回整个数组。似乎循环最终会更好地完成这项工作,或者我错过了什么吗?

假设你发布的代码对你有用

如果您希望第一行的
.text
不是每行的空,使用CSS选择器组合可能是解决方案




编辑
可以我改进了一点。
似乎在一个空的
td
中可以有一些空格。。。 所以我用一个
regex
来测试它

以下是我使用的新事物:

JavaScript方法
JavaScript方法

还有我试过的代码笔

$(document).ready(function(){
  console.clear();
  console.log("loading...");

  var tRows = $('tr').map(function() {
    return [$(this).find('td:first').map(function() {
      var pattern = /^\s+$/;
      if($(this).text()!="" && !pattern.test($(this).text())){
        return $(this).text().trim();
      }
    }).get()]
  }).get()

  console.log(tRows)
});
此返回:
[[“blah1],[blah7]]
,在代码栏中…
如果您不希望中间有一个空的:

第二

此返回:
[[blah1],[blah7]]





第二次编辑
这也可以通过这种方式实现。
(这意味着只有一个循环,代码更易于阅读)。
见第3页


这也返回:
[[“blah1],[blah7]]

map()
获取参数,该参数为您提供当前元素的索引,因此您可以使用该参数并检查文本长度,如@NenadVracar噢,我实际上的意思是不将整行(即数组)而不是单元格添加到2d数组中。但我将尝试在小提琴的基础上实现这一点。
返回$(this).text()| | undefined
在这种情况下,您可以这样做@NenadVracar的确,我没有想到内部映射可以置于一个条件中。Throws:Uncaught Error:Syntax Error,无法识别的表达式:tr:first child(td:not(:empty())好的…等一下,我会在CodePen中尝试。我对它做了一点改进…尝试一下!现在,如果你不想得到空数组…我可以给你看。这与我的想法类似,要删除带有空单元格的数组,检查是在外部映射调用中执行的,而不是内部映射调用
$(document).ready(function(){
  console.clear();
  console.log("loading...");

  var tRows = $('tr').map(function() {
    var arr = [$(this).find('td:first').map(function() {
      var pattern = /^\s+$/;
      if($(this).text()!="" && !pattern.test($(this).text())){
        return $(this).text().trim();
      }
    }).get()];

    if(arr[0]!=""){
      return arr;
    }
  }).get()

  console.log(tRows)
});
$(document).ready(function(){
  console.clear();
  console.log("loading...");

  var arr=[];
  var counter=0;

  $('tr').each(function() {
    var thisTDtext = [$(this).find("td").first().text().trim()];

    if(thisTDtext!=""){
      arr[counter] = thisTDtext;
      counter++;
    }
  });

  console.log(JSON.stringify(arr));

});