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

时间:2017-04-22 18:55:56

标签: javascript jquery html arrays multidimensional-array

我想出了将html表数据存储到2D数组的问题。我没有使用嵌套循环,而是在寻找允许我这样做的jquery函数。我发现this method似乎可以完成这项工作。

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

console.log(tRows)
  

我想知道,如何在给定代码中使用条件来检查td的第一个tr是否为空(或者一般的其他一些条件)因此不会将该行添加到最终数组。

修改

阅读评论并以this fiddle为基础,我现在有了

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

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

这有点工作,但我希望检查内部映射中的条件并返回NULL而不是整个数组。从discussion here开始,似乎无法中途中止内部地图调用,它将返回整个数组。看起来像循环可能会更好地完成这项工作,还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

假设您发布的代码适合您......

如果您希望每行的第一个.text的{​​{1}}不为空,则可以使用CSS选择器组合。

:first-child
:not
:empty

修改
好的......我改进了一点 好像在空td中可以有一些空格... 所以我使用td来测试它。

以下是我使用的新内容:
:first
.test() JavaScript方法
.trim() JavaScript方法

我尝试过的 CodePen

regex

此返回:$(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) }); ,在CodePen中...
如果你不想让空的那个在中间:

第二个CodePen

[["blah1],[],[blah7]]

此回复:$(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) });




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

[["blah1],[blah7]]

这也会返回:$(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)); });