Javascript 如何有条件地循环以将标题行映射到数据行

Javascript 如何有条件地循环以将标题行映射到数据行,javascript,c#,jquery,loops,datatables,Javascript,C#,Jquery,Loops,Datatables,如果我有两种类型的行: 标题行和数据行。任何一行都应该由18列组成 数据行数基于标题行数,例如: If I have 2 header rows, I should have (2 datarows: the first one map to the first header row, the second one map to the second header row + 2 datarows: the first one map to the first header row, the s

如果我有两种类型的行:

标题行
数据行
。任何一行都应该由
18列组成

数据行数基于标题行数,例如:

If I have 2 header rows, I should have (2 datarows: the first one map to the first header row, the second one map to the second header row + 2 datarows: the first one map to the first header row, the second one map to the second header row + 1 data rows for total: maps to the first header row ) = 5 datarows per group

If I have 3 header rows, I should have (3 datarows: the first one map to the first header row, the second one map to the second header row, the third one maps to the third header row + 3 datarows: the first one maps to the first header row, the second one maps to the second header row, the third one mapss to the third header row + 1 for total: maps to the first header row) = 7 datarowsper group
等等

NOTE: ALWAYS I SHOULD HAVE ONE DATA ROW FOR THE TOTAL DATA ROWS.
我想在数据行的列上循环并映射到相关的标题列数据:

"render": function (data, type, full, meta) {

           let tooltip = isNaN(data) ? data : Number(data);

           return type === 'display' ? '<div  id="tooltip" data-tooltip="' +parsedData.columns[meta.col].toString().split("-")[0] + " = " + tooltip + "|" + meta.row + '">' + data : data;
    }
我的代码中的问题是,无论标题行的数量如何,它总是映射到第一个标题行

为了解决这个问题,我想做一个条件循环

因此,如果
标题行数=数组[36]/18=2
标题行:

parsedData.columns = array[36] where 36 = 2 * 18 = number of header rows * number of columns per row.

There are multiple data rows one array for each data row = one row array[18]

meta.row = row index
  • 第一个数据行迭代:
    parsedData.columns[meta.col].toString().split(“-”[0]
  • 第二次数据行迭代:
    parsedData.columns[meta.col-18].toString().split(“-”[0]
  • 第三个数据行迭代:
    parsedData.columns[meta.col].toString().split(“-”[0]
  • 第四次数据行迭代:
    parsedData.columns[meta.col-18].toString().split(“-”[0]
  • 第五次数据行迭代:(总计)因此第一次
    parsedData.columns[meta.col].toString().split(“-”[0]

根据评论,这里有一个例子:


  • 本例中的标题行=数组[36]
  • 数据行是多个数组(5),每个数组=数组[18]
因为我有2个标题行-->我有5个数据行

2 + 2 + 1(total).

现在,我想将数据行中的每个工具提示单元映射到其对应的标题行,如上图所示。但它总是映射到第一个标题行。

初始注释:

int[] address = GeHeaderAddress(18);
//returns {1,0} //as the arrays are zero-based indexed
我不是JavaScript专家,但您提到,即使是C#解决方案,您也会很高兴

至于你的要求

标题行和数据行。任何一行都应该由18列组成

我想将数据行中的每个工具提示单元映射到其等效单元 如上图所示的标题行。但它总是映射到第一个 标题行

假设目标表中的列数为常量(18),则查找相应标头地址的算法非常简单:

public int[] GeHeaderAddress(int metaCol)
{
    int noOfColumns = 18;
    int currCol = (int)(metaCol%noOfColumns);
    int currRow = (int)(metaCol/noOfColumns);
    int[] address = new int[]{currRow,currCol};
    return address;
}
用法:

int[] address = GeHeaderAddress(18);
//returns {1,0} //as the arrays are zero-based indexed

为了找到对应的头,我们需要在计算中考虑总标题行。< /P> 然后下面的javascript函数将返回标题位置(meta.col)

函数getHeaderCol(totalHeaderRows、dataRow、dataCol){ 常量groupRows=(2*totalHeaderRows)+1 const newDataRow=dataRow%groupRows 返回((新数据行%totalHeaderRows)*18)+数据列 } log(getHeaderCol(2,4,10))//结果10,组1 log(getHeaderCol(2,5,10))//结果10,组2
您是否可以添加一个示例输入数据集和预期结果?您是否保证您的输入数据集始终以正确的顺序出现?e、 g.
[HR][DR][HR][DR][HR][DR]…[TR]
?如果是这样的话,您可以通过索引来处理每一行,并评估它是奇数还是偶数。“总计”行总是最后一行,其索引等于“总计-1”。@GB标题行不会与数据行重复。如果我有2hd,那么根据分组,我有6dr或12dr或18dr或24dr,我不想正确地进行映射。我也很抱歉,但是如果没有输入数据和预期结果,真的很难帮助您;所以,请永远向我们提供您的输入数据、您的预期结果和您的无效代码,这样我们就可以停止这个无用的乒乓球,开始为您的问题提供答案。@ShaiCohen:对不起,我编辑了我的问题并添加了一张照片来说明这个想法,总数应该始终=1行而不是2行。谢谢,但仍然是相同的问题。请注意
标题是单个数组=数组[18*2]=数组[36]
<代码>数据行=多个数组每个数组=数组[18]对不起,我不明白你的意思。。。如您所见,在
用法
一节中,我使用了
18
,这意味着函数必须使用原始列索引(输入数组[36])来获取标题行数。请澄清您的输入数据。例如:根据您提供的图片,标题第二行中的B10=行索引“21”:
行索引=21
不指
B10
!从左到右计数21。“单元格”是指
T4
下的标题。这就是为什么我要求您提供示例输入数据。我猜是这样的:
string[]stringData=newstring[]{“A1-A2-A3-A4-A5-A6-A7-A8-A9-A10-A11-A12-B1-B2-B3-B4-B5-B6-B7-B8-B9-B10-B11-B12-T2-T3-T4-T5-T6-T7-T8-T8-T9-T9-T11-T11-T12”、“-91.52---1160-6163-188---10.56---17.6---5-638-28--.52因此,当您将其“转换”为具有恒定列数的数组时,您只需要传递列号。如果我有多个组,比如说两个组=10个数据行,则失败,第6行应属于标题1,但它属于标题2。如果我正确获得,我将更新该函数以使用多个组。数据行和数据列从零开始。请看一看并给出您的反馈@任何名字都不在乎
int[] address = GeHeaderAddress(18);
//returns {1,0} //as the arrays are zero-based indexed