Javascript jQuery—有选择地将表数据存储到2d数组
我提出了将html表数据存储到2D数组的问题。我没有使用嵌套循环,而是寻找允许我执行相同操作的jquery函数。我找到了似乎能胜任这项工作的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的
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));
});