【问题标题】:Selecting the value of an entire dictionary选择整个字典的值
【发布时间】:2019-02-22 04:18:24
【问题描述】:

我正在制作一个简单的问答游戏,但在计算结果时遇到了一些问题。问题真的很简单,我需要找出如何判断clicked1 的值是否超过它所在的整个字典然后执行此功能。这是字典的代码和我正在尝试制作的功能。另外,如果有人能解释为什么possibilities.value 不能解决我的问题,那将不胜感激。

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

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

【问题讨论】:

  • 您要检查clicked1 是否大于possibilities 中的属性数量吗?
  • 我想知道 'clicked1' 是否大于 'clicked2' 的值, 3 ,4 以此类推。

标签: javascript arrays object ecmascript-6


【解决方案1】:

只需使用every 遍历Object.values

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

【讨论】:

  • 没问题@TheNuthouse,如果我的回答解决了您的问题,请务必点赞并接受。
  • 工作正常,但我无法理解语法,我现在只用 JavaScript 编码可能 2 周,如果可以的话,请解释一下,只需在重要部分粘贴一些注释即可。
【解决方案2】:

您可以使用every()。您还可以使用Math.max() 和 Rest 参数检查对象值的最大值

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

【讨论】:

    【解决方案3】:

    这是一种与您尝试的方法非常相似的方法。

    基本上循环遍历字典中的键和值,忽略键的值,'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());

    【讨论】:

      【解决方案4】:

      另一种方法是检查您是否找到了大于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);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-20
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 2016-04-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多