Bonjour a tous,

Je souhaite réaliser un formulaire avec calcul de prix, J'ai un formulaire avec plusieurs input de type radio. Quand je séléctionne un radio j'ai une value qui correspond a un champ dans un tableau. ( Value = 1; $array[$value] et il me retourne un prix que je stock dans un tableau ).

j'ai un tableau comme ceci :
$choix[0]['prix'] = 350
$choix[0]['name'] = question1
$choix[1]['prix'] = 620

Et ainsi de suite. Je souhaite addionner le tableau mais pas via une variable. Pourquoi ? Simplement car utilisant des input radio, si je séléctionne un champ, il me l'additionne bien mais si je séléctionne le deuxiéme aprés le premier il me l'addionne au premier. Ce que je ne souhaite pas. Par example si la question une a la valeur 1 et que la question deux a la valeur 2. Je séléctionne la valeur1 a une variable somme, 0($somme) + 1(value) = 2($newsomme). Maintenant si je change d'avis, je selectionne la deux. Dans ce cas il me séléctionne 2($somme) + 2($value) = 4. Mais la 1 n'est plus coché donc il devrais juste me retourné 2. Je sais pas si je m'éxplique bien, je vais donc vous montré mon code.

    $price = [];
    $choix = [];

    $somme = 0;

    $price['qcm-1'] = ['510','650','712'];
    $price['qcm-2'] = ['490','820','520'];

    $('.qcm').on('change', function(e){

        $name  = $(this).attr('name');
        $input = $('input[name='+$name+']:checked');
        $value = $input.val();
        $text  = $input.parent().text();

        $choix[$name.split('-')[1]-1] = [];
        $choix[$name.split('-')[1]-1]['price'] = $price[$name][$value];
        $choix[$name.split('-')[1]-1]['name']  = $name;
        $choix[$name.split('-')[1]-1]['text']  = $text;

        for(var i=0;i<$choix.length;i++){
            $somme += parseFloat($choix[i]['price']);
        }

        console.log($choix);

    });

Je souhaiterais addionner les valeurs des tableau $choix[i]['price'] mais sans utilisé une variable.

Un peux complexe, j'éspére que je me suis bien éxpliqué. Merci a tous d'avance et bonne fin de journée.

3 réponses


etiennedewa
Réponse acceptée

Tu peux utiliser la librairie Lodash (https://lodash.com/docs#sum)

_.sumBy($choix, function(o) { return o.price; });

Enfin, si j'ai bien compris la question ...
Ah bah d’ailleurs : https://www.grafikart.fr/tutoriels/javascript/lodash-763

DylanVsn
Auteur

Merci de ta réponse, je vais regardé ca. Bonne fin de journée.

DylanVsn
Auteur

Un énorme merci pour ton aide, depuis 3 jours que j'essaie tellement de chose et en une phrase tu régle mes soucis ! J'ai juste eu a rajouté un parseInt a cette ligne "$choix[$name.split('-')[1]-1]['price'] = parseInt($price[$name][$value]);" et ajouté la phrase "console.log(_.sumBy($choix, function(o) { return o.price; }));" et cela fais éxactement ce que je veux. Encore merci !