5
votes

Comment vérifier la valeur du tableau pour NaN en utilisant jQuery chaque fonction?

J'ai ce code HTML qui récupère les données de la base de données. J'ai défini un tableau en entrée HTML.

Code Html

<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>

La valeur de jan1 [] s'affiche dans console.log comme p >

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

TOTAL           3000        0

Quand j'essaie de faire la somme du total pour jan1 [], la sortie s'affiche comme NaN car une partie de la valeur du tableau est NaN. Comment puis-je définir la valeur NaN sur 0 et faire le calcul de la somme?

Ce que je veux faire est de résumer la valeur comme ci-dessous

NaN
1000
3000
NaN

Voici le code de jQuery.

<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>

Merci.


2 commentaires

NaN est faux donc vous pouvez utiliser var value = parseFloat ($ (this) .val ()) || 0;


Copie possible de Comment désactiver NaN de parseInt en 0 pour une chaîne vide?


3 Réponses :


4
votes

Il vous suffit de convertir les valeurs NaN en 0 dans votre fonction de somme. Voici un exemple d'utilisation de reduce:

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

let sum = arr.reduce((acc, num) => acc += num ? num : 0, 0);
console.log(sum);
// 4000


0 commentaires

3
votes

Essayez ceci

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


0 commentaires

3
votes

remplacez simplement var value = parseFloat ($ (this) .val ()); à

var value = $ (this) .val ()? $ (this) .val (): 0; ligne.

Cela résoudra votre problème.


0 commentaires