Выбор значения всего словаря - PullRequest
0 голосов
/ 22 февраля 2019

Я делаю простую игру-викторину и у меня возникают проблемы с подсчетом результатов.Проблема действительно проста, мне нужно выяснить, как сказать, если clicked1 имеет значение больше, чем весь словарь, в котором он находится, то выполните эту функцию.Вот код для словаря и функция, которую я пытаюсь сделать.Кроме того, если кто-то может объяснить, почему possibilities.value не работает для моей проблемы, это было бы очень полезно.

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

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

Ответы [ 4 ]

0 голосов
/ 22 февраля 2019

Другая альтернатива - проверить, нашли ли вы какой-либо элемент больше possibilities["clicked1"].Если вы нашли его, вы будете знать, что possibilities["clicked1"] не является максимальным значением, в противном случае оно будет максимальным значением среди всех остальных.Для этого мы можем использовать Object.values ​​() , чтобы получить массив значений из вашего объекта, а затем мы используем Array.some () , чтобы выполнить упомянутую проверку:

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 голосов
/ 22 февраля 2019

Вы можете использовать every().Вы также можете проверить максимальное значение значений объекта, используя Math.max() и Параметры покоя

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 голосов
/ 22 февраля 2019

Вот подход, очень похожий на тот, который вы использовали в своей попытке.

В основном циклически перебирайте ключи и значения в словаре, игнорируя значение ключа, «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 голосов
/ 22 февраля 2019

Просто переберите Object.values с every:

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!");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...