2
votes

Sélection de la valeur d'un dictionnaire entier

Je crée un jeu de quiz simple et j'ai du mal à calculer les résultats. Le problème est vraiment simple, j'ai besoin de savoir comment dire si clicked1 a une valeur supérieure à l'ensemble du dictionnaire dans lequel il se trouve, puis effectuez cette fonction. Voici le code du dictionnaire et la fonction que j'essaie de créer. Aussi, si quelqu'un pouvait expliquer pourquoi possibilités.value ne fonctionne pas pour mon problème, ce serait très apprécié.

var possibilities = {
    'clicked1': 0,
    'clicked2': 0,
    'clicked3': 0,
    'clicked4': 0,
};

function results(){
    if (possibilities['clicked1'] > possibilities){
        console.log("it worked");
    }
};


2 commentaires

Voulez-vous vérifier si clicked1 est supérieur au nombre de propriétés dans possibilités ?


Je veux savoir si «clicked1» est supérieur à la valeur de «clicked2», 3, 4 etc.


4 Réponses :


1
votes

Il suffit de parcourir Object.values ​​ avec chaque:

var possibilities = {
    'clicked1': 0,
    'clicked2': 0,
    'clicked3': 0,
    'clicked4': 0,
};

if (Object.values(possibilities).every(val => possibilities.clicked1 >= val || val == possibilities.clicked1)) {
  console.log("It works!");
}


2 commentaires

Pas de problème @TheNuthouse, si ma réponse a résolu votre problème, assurez-vous de voter et de l'accepter.


Fonctionne bien, mais j'ai du mal à comprendre la syntaxe, je ne codifie avec JavaScript que depuis peut-être 2 semaines maintenant, veuillez expliquer si vous le pouvez, simplement en collant quelques notes par les parties importantes.



0
votes

Vous pouvez utiliser chaque () . Vous pouvez également vérifier si la valeur maximale des valeurs d'objet en utilisant Math.max () et paramètres de repos

var ps = {
    'clicked1': 4,
    'clicked2': 1,
    'clicked3': 2,
    'clicked4': 3,
};
if(Object.keys(ps).every(key => ps[key] <= ps.clicked1)){
  console.log("worked")
}
//Second Method:
//Object.values(ps) will return '[4,1,2,3]' And then using ... all values
//are passed to function Math.max() single argument. and it will return the max value out of those and then compare that value with you desired value
if(Math.max(...Object.values(ps)) === ps.clicked1){
    console.log("Worked");
}


0 commentaires

0
votes

Voici une approche assez similaire à celle que vous aviez lors de votre tentative.

En gros, bouclez sur les clés et les valeurs du dictionnaire, en ignorant la valeur de la clé, 'clicked1':

let possibilities = {
  'clicked1': 0,
  'clicked2': 0,
  'clicked3': 0,
  'clicked4': 0,
};

function result() {
  for (let key in possibilities) {
    if (key !== 'clicked1' &&  possibilities[key] >= possibilities['clicked1']) {
      return "it did not work";
    }
  }
  return "it worked";
}

console.log(possibilities);
console.log("result() =", result());
possibilities['clicked1'] = 1;
console.log(possibilities);
console.log("result() =", result());


0 commentaires

0
votes

Une autre alternative est de vérifier si vous avez trouvé un élément supérieur à possibilités ["clicked1"] . Si vous en avez trouvé une, vous saurez que possibilités ["clicked1"] n'est pas la valeur maximale, sinon ce sera la valeur maximale parmi toutes les autres. Pour cette approche, nous pouvons utiliser Object.values ​​( ) pour obtenir un tableau de valeurs de votre objet, puis nous utilisons Array.some () pour effectuer la vérification mentionnée:

var possibilities1 = {'clicked1': 6, 'clicked2': 3, 'clicked3': 4, 'clicked4': 5};
var possibilities2 = {'clicked1': 3, 'clicked2': 3, 'clicked3': 4, 'clicked4': 5};

function results(ps)
{
    let found = Object.values(ps).some(x => x > ps['clicked1']);
    found ? console.log("not worked") : console.log("worked");
};

results(possibilities1);
results(possibilities2);


0 commentaires