Как l oop условно сопоставить строки заголовка строкам данных - PullRequest
5 голосов
/ 16 июня 2020

Если у меня есть два типа строк:

header rows и data rows. и любая строка должна составлять 18 columns.

Количество строк данных зависит от количества строк заголовка, например:

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.

Я хочу l oop над столбцами строк данных и сопоставить с соответствующими данными столбца заголовка:

"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;
    }

Давайте возьмем второй пример: у меня есть две строки заголовка:

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

Проблема в моем коде заключается в том, что он всегда сопоставляется с первой строкой заголовка независимо от количества строк заголовка.

Чтобы решить эту проблему, я хочу сделать условное l oop.

так, если the number of header rows = array[36] /18 = 2 строки заголовка:

  • Итерация первой строки данных: 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]
and repeat this pattern for each group of row data(5 data rows per group), may I have 3 groups so I have 15 data rows

На основе комментариев вот пример:

введите описание изображения здесь

528.00  -->Tooltip should = A1:528.00
52.80   -->Tooltip should = B9:52.80
240.00- -->Tooltip should = B10:240.00-
91.52   -->Tooltip should = T5:91.52
  • Строки заголовка в этом примере = массив [36]
  • Строки данных представляют собой несколько массивов (5) каждый массив = массив [18]

, потому что У меня есть 2 строки заголовка ---> У меня 5 строк данных

2 + 2 + 1(total).

Теперь я хочу сопоставить каждую ячейку подсказки в строках данных с ее эквивалентом строк заголовка, как показано выше. но он всегда соответствует первой строке заголовка.

Ответы [ 2 ]

1 голос
/ 24 июня 2020

Чтобы найти заголовок корреспонденции, нам нужно учитывать общее количество строк заголовка в нашем расчете.

Тогда приведенная ниже функция javascript вернет расположение заголовка (meta.col)

function getHeaderCol(totalHeaderRows, dataRow, dataCol){
    const groupRows = (2 * totalHeaderRows) + 1
    const newDataRow = dataRow % groupRows
     return ((newDataRow % totalHeaderRows) * 18) + dataCol
    }
    
    console.log(getHeaderCol(2,4,10)) // result 10 , group 1
    console.log(getHeaderCol(2,5,10)) // result 10 , group 2
    
    
1 голос
/ 24 июня 2020

Начальное примечание:

Я не специалист по 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
...