javascript 为什么我的函数中的结果与direct console.log中的结果不同?

5jvtdoz2  于 2023-01-08  发布在  Java
关注(0)|答案(1)|浏览(134)

我在做一个挑战,我不想知道挑战的答案,但是我遗漏了一些东西。我正在尝试循环一个对象,并将它的条目与一个给定的数组进行比较。下面是代码。

function score(dice){
 let res;
 const diceStr = "" + dice.sort();

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

  for(const [key,entry] of Object.entries(states)){
  if(diceStr.includes(entry.toString())) res = key
  else res = 0
  }
  return res;

}
'
第一个月
这个条目的结果应该是400,但它不是,我不明白为什么。正如我之前所说,我只需要知道这个错误背后的原因。我没有说,这个挑战的目标是什么或我从哪里得到它,-即使它看起来很明显-因为我不想解决这个挑战。我只是不能看到我的错误在这里。
这里是另一个日志,我认为完全相同的事情必须从函数中出来,它的结果是真的在控制台。
console.log('3,3,4,4,4'.includes('4,4,4'));
如果这是一个重复的问题,或者有任何方法可以让我间接地意识到这里的错误,请引导我到那个文档或问题。
谢谢你抽出时间。

wqsoz72f

wqsoz72f1#

我建议使用find函数,而不是for循环。

function score(dice){
 let res = [0];
 const diceStr = "" + dice.sort();

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


    res = Object.entries(states).find(each => {
        const [key,entry] = each
        return diceStr.includes(entry.toString())
    })
  return res[0];
}

这使得代码更简洁、可读性更强,而且您不必担心else条件。

相关问题