Datatables - Пропуск определенных строк из расчета нижнего колонтитула - PullRequest
0 голосов
/ 30 мая 2019

У меня есть таблица, которая вычисляет сумму всех строк в нижнем колонтитуле. У меня вопрос, могу ли я опустить определенные строки на основе критериев.

Например, у меня есть статистика сезона для бейсболиста с общей суммой его карьеры, рассчитанной в нижнем колонтитуле. Этот конкретный игрок играл за две разные команды в сезоне 2018 года. На это указывает TOTAL в поле лиги LEAGUE, в котором я добавил его объединенную статистику для каждой команды в этом сезоне. Итак, глядя на стол, вот что вы должны заметить:

У него было 1 HITS на сезон 2017 года для STL

У него было 15 HITS для сезона 2018 года (5 для LAD и 10 для BAL)

Учитывая это, вы должны видеть, что его общее количество в карьере не было правильно подсчитано. У него должно быть 16 карьер, а не 31. Таким образом, чтобы уточнить это, я хотел бы опустить все строки, которые имеют TOTAL в столбце LEAGUE от подсчета в сумме нижнего колонтитула. Как бы я это сделал? Любая помощь здесь будет принята с благодарностью. Благодаря.

YEAR    Name        AGE  TEAM   LEAGUE   HITS   
2017    John Smith  25   STL    NL       1
2018    John Smith  26          TOTAL    15
2018    John Smith  26   LAD    NL       5
2018    John Smith  26   BAL    AL       10
        Career Total                     31

Вот мой код

<div align="center">
         <table id = 'battingtbl' class="display compact nowrap">
        <thead>
            <tr>
                <th>YEAR</th>
                <th>NAME</th>
                <th>AGE</th>
                <th>TEAM</th>
                <th>LEAGUE</th>
                <th>HITS</th>
            </tr>
        </thead>
        <tbody>
        {% for stat in playerdata.bbhittingstatsmstr_set.all %}
            <tr>
                <td>{{ stat.year }}</td>
                <td>{{ stat.name }}</td>
                <td>{{ stat.age }}</td>
                <td>{{ stat.team }}</td>
                <td>{{ stat.league }}</td>
                <td>{{ stat.hits }}</td>
            </tr>
        {% endfor %}
        </tbody>
             <tfoot>
                    <tr>
                        <th></th>
                        <th></th>
                        <th></th>
                        <th></th>
                        <th></th>
                        <th></th>
                    </tr>
             </tfoot>
        </table>
                <script>
                    $(document).ready(function () {
                        $('#battingtbl').DataTable({
                            "searching": true,
                            "pageLength": 40,
                            "scrollX": true,
                            "paging": false,
                            "info": false,
                            drawCallback: () => {
                                const table = $('#battingtbl').DataTable();
                                const tableData = table.rows({
                                        search: 'applied'
                                    }).data().toArray();
                                const totals = tableData.reduce((total, rowData) => {
                                        total[0] += parseFloat(rowData[5]);          <!--HITS -->
                                        return total;
                                    }, [0,0,0,0,0,0]);
                                $(table.column(5).footer()).text(totals[0]);         <!--HITS -->
                            }
                        })
                    });
                </script>

1 Ответ

1 голос
/ 30 мая 2019

Добавить оператор if в вызов tableData.reduce:

const totals = tableData.reduce((total, rowData) => {
    if (rowData[4] !== 'TOTAL') {
        total[0] += parseFloat(rowData[5]);          <!--HITS -->
    }
    return total;
}, [0,0,0,0,0,0]);

$(table.column(5).footer()).text(totals[0]);         <!--HITS -->

Также вы можете упростить начальное значение запроса на уменьшение (3-й аргумент):

// totals is a Number not an Array
const totals = tableData.reduce((total, rowData) => {
    if (rowData[4] !== 'TOTAL') {
        total += parseFloat(rowData[5]);          <!--HITS -->
    }
    return total;
}, 0);

$(table.column(5).footer()).text(totals);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...