You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何score函数返回结果与直接console.log验证结果不一致?

问题分析与修复

你的代码核心问题在于循环中每次迭代都会无条件覆盖res变量:

当调用score([4,4,4,3,3])时,diceStr会被处理成"3,3,4,4,4"。遍历states对象时,确实会在匹配到400: [4,4,4]时把res设为"400",但后续还会继续遍历剩下的键(比如500、600、1000、100、50),这些项的数组转成字符串后都不在diceStr里,所以res会被一次次重置为0,最终返回的是最后一次迭代的结果0。

而你单独测试'3,3,4,4,4'.includes('4,4,4')返回true是对的,但这只是单次判断,没有后续的覆盖操作,所以和代码里的循环逻辑本质不同。

快速修复思路

如果只需要解决当前测试用例的问题,可以在找到匹配项后立即终止循环(同时要调整遍历顺序,优先匹配高分组合,避免低价值匹配覆盖高价值结果):

function score(dice){
 let res = 0; // 初始化为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],
  }

  // 按分数从高到低排序,确保优先匹配高价值组合
  const sortedEntries = Object.entries(states).sort((a,b) => b[0] - a[0]);
  for(const [key,entry] of sortedEntries){
    if(diceStr.includes(entry.toString())){
      res = key;
      break; // 找到匹配项就停止循环,避免被后续项覆盖
    }
  }
  return Number(res); // 转换为数值类型返回,原代码返回的是字符串键
}

这样调用score([4,4,4,3,3])时,会先匹配到400的组合,然后终止循环,返回正确的数值400。

内容的提问来源于stack exchange,提问作者Arnfinn Arend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:20:22