【问题标题】:Look up keys in a javascript object and return a result在 javascript 对象中查找键并返回结果
【发布时间】:2020-10-13 10:40:37
【问题描述】:

我有以下算法,我传入一个数组,我计算数组中每个数字的数量。然后我需要根据每个数字在数组中出现的次数返回一个结果。结果没有改变,所以我创建了一个查找表,可以在下面的scoreResults 对象中找到:

  const scoreResults  = {
    1: {
      1:100
      3:1000
    },
    2: {
      3: 200
    },
    3: {
      3:300
    },
    4: {
      3:400
    },
    5: {
      3:500
      1:50
    },
    6: {
      3:600
    },
  }


 // example dice [2,3,6,6,6]
function score(dice) {
[...]
  return getResult(mapping); // mapping = {2:1, 3:1, 6:3}
}

function getResult(object){
 for (const key in object){

[CODE I CANNOT FIGURE OUT]

 }
 
}

对于我想不通的部分,我想做以下事情:

我现在想检查我的mapping 对象中的每个键。例如,让我们在我的 mapping 对象中获取键值对 6:3。如果键 6 在我的 scoreResults 对象(它是)中,请检查我的映射对象(即 3)中键 6 的 value 如果它是 3,则检查此处是否有键 3,在 6 内key:6: {3:600}, return 600 (value) 如果不是,则什么也不返回。

另一个例子: 对于我的mapping 对象中的键值对2:1 我想查看键2 是否在我的scoreResults 对象中(它是)检查我的映射对象中键2value 是什么是1,在我的scoreResults 中键2 的值中没有1,所以什么都不返回。

基本上我正在尝试解决这个算法:https://www.codewars.com/kata/5270d0d18625160ada0000e4/train/javascript

如果您需要进一步说明,请告诉我

【问题讨论】:

  • 您刚刚描述了您的代码必须执行的操作。试着在你的句子后面写下代码。 If key 6 is in my scoreResults object --> 例如if(scoreResults[6])
  • 你能接受一个答案吗?这些答案显然解决了这个问题。 stackoverflow.com/help/someone-answers

标签: javascript algorithm object


【解决方案1】:

这是您的解决方案。您可以使用 Object.keys 从对象的键创建数组。就像我在这里所做的一样,您可以使用参数而不是我预定义的映射对象。

const scoreResults  = {
    1: {
      1:100,
      3:1000
    },
    2: {
      3: 200
    },
    3: {
      3:300
    },
    4: {
      3:400
    },
    5: {
      3:500,
      1:50
    },
    6: {
      3:600
    },
  }


let mapping = {2:1, 3:1, 6:3}

function getResult(){
    let result;
    const keys = Object.keys(mapping);
    keys.map(key => {
        if(scoreResults[key][key]) {
            result = scoreResults[key][key];
        }
    })
    return result;
}

【讨论】:

    【解决方案2】:

    要使其适用于任何 scoreResults 和骰子数量,您可以执行以下操作:

    function getResult(mapping) {
        let res = 0
        for (let key of Object.keys(mapping)) {
            if (!scoreResults[key])
                 continue
            let count = mapping[key]
            let test = count
            while (count > 0 && test > 0) {
                if (scoreResults[key][test]) {
                    let amount = Math.floor(count / test)
                    res += amount * scoreResults[key][test]
                    count -= amount * test
                    test = count
                } else {
                    test--
                }
            }
        }
        return res
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多