Как проверить значение массива для NaN, используя jQuery каждой функции? - PullRequest
5 голосов
/ 12 марта 2019

У меня есть этот HTML-код, который извлекает данные из базы данных.Я установил массив для ввода HTML.

HTML-код

<table>
    <thead>
        <tr>
            <th>Category</th>
            <th>January</th>
            <th>February</th>
        </tr> 
    </thead>
    <tbody>
        <?php
        $sql = DB::getInstance()->FetchArray("select * from table");
        if(count($sql) > 0)
        {
            foreach($sql as $row)
            {
                $i = 0;
                if($i == 0)
                {?>
                    <tr>
                        <td><input type="text" class="cat1" id="cat1" name="cat1[]" value="<?php echo $row['CATEGORY']; ?>" placeholder="" readonly></td>
                        <td><input type="text" class="jan1" id="jan1" name="jan1[]" value="<?php echo (($row['MONTH']=='JANUARY')? $row['TOTAL']:''); ?>" placeholder="" readonly></td>
                        <td><input type="text" class="feb1" id="feb1" name="feb1[]" value="<?php echo (($row['MONTH']=='FEBRUARY')? $row['TOTAL']:''); ?>" placeholder="" readonly></td>
                    </tr> 
                <?php
                }
                else
                {?>
                    <tr>
                        <td></td>
                        <td><input type="text" class="jan1" id="jan1" name="jan1[]" value="<?php echo (($row['MONTH']=='JANUARY')? $row['TOTAL']:''); ?>" placeholder="" readonly></td>
                        <td><input type="text" class="feb1" id="feb1" name="feb1[]" value="<?php echo (($row['MONTH']=='FEBRUARY')? $row['TOTAL']:''); ?>" placeholder="" readonly></td>
                    </tr>
                <?php
                }
                $i++;
        }
        ?>
        <tr>
            <td colspan="2" style="text-align:right;">Total</td>
            <td><input type="text" class="form-control inputnumberwith2decimals total_jan1" id="total_jan1" name="" value="" placeholder="" readonly></td>
            <td><input type="text" class="form-control inputnumberwith2decimals total_feb1" id="total_feb1" name="" value="" placeholder="" readonly></td> 
        </tr>
    </tbody> 
</table>

Значение для jan1 [] отображается в console.log как

NaN
1000
3000
NaN

Когда я пытаюсь суммировать итоговое значение для jan1 [], выходные данные отображаются как NaN, потому что некоторые значения массива - это NaN.Как я могу установить значение NaN в 0 и выполнить вычисление суммы?

Что я хочу достичь, это суммировать значение, как показано ниже

CATEGORY        JANUARY     FEBRUARY
BANANA          NaN         NaN
                1000        NaN
                2000        NaN
                NaN         NaN

TOTAL           3000        0

Вот код для jQuery.

<script>
    $(document).ready(function(){
        var sum_jan1 = parseFloat(0);
        $(".jan1").each(function(){
            var value = parseFloat($(this).val());
            sum_jan1 += value;
        });
        $('#total_jan1').val(sum_jan1);
    });
</script>

Спасибо.

Ответы [ 3 ]

4 голосов
/ 12 марта 2019

Вам просто нужно преобразовать значения NaN в 0 в вашей функции суммы.Ниже приведен пример использования reduce:

const arr = [NaN, 1000, 3000, NaN];

let sum = arr.reduce((acc, num) => acc += num ? num : 0, 0);
console.log(sum);
// 4000
3 голосов
/ 12 марта 2019

Попробуйте это

<script>
$(document).ready(function(){
    var sum_jan1 = parseFloat(0);
    $(".jan1").each(function(){
        var value = parseFloat($(this).val());
        sum_jan1 += value?value:0;
    });
    $('#total_jan1').val(sum_jan1);
});

2 голосов
/ 12 марта 2019

просто замените var value = parseFloat($(this).val()); на

var value = $(this).val() ? $(this).val() : 0; строку.

Это решит вашу проблему.

...