You need to enable JavaScript to run this app. JavaScript实现保龄球计分:累加前序数组总和至下一数组首元素的方法
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现保龄球计分:累加前序数组总和至下一数组首元素的方法

十瓶保龄球计分卡核心计分逻辑实现

你卡壳的索引访问逻辑说明

  • 数组元素的索引从0开始计数,比如参考用的frames = [[1, 2], [6, 4], [5, 4], [10, 0], [7, 2], [10, 0], [10, 0], [5, 2], [7, 0], [4, 4]],第一帧对应索引0,第二帧对应索引1,以此类推
  • 取单个帧的两球得分总和,直接用嵌套方括号访问即可,比如索引为i的帧,两球得分分别是frames[i][0]、frames[i][1],帧自身总和就是frames[i][0] + frames[i][1]
  • 要实现“当前帧总和 + 下一帧第一个数字”的需求,只需要通过i+1的索引定位到下一帧,再取它的第一个元素:frames[i+1][0]
  • 关于你提到的点语法、方括号语法的选择:动态遍历索引的场景必须用方括号语法,因为点语法不能拼接动态变量值,比如写frames.i会直接报错,合法写法是frames[i]

补中场景的计算示例(对应你举的[6,4], [5,4]的例子)

  1. 定位[6,4]在frames数组里的索引是1,先算当前帧自身总和:6 + 4 =10
  2. 判断当前帧是补中(两球总分等于10且第一球不是全中10分),需要叠加奖励分:取下一帧(索引为2的[5,4])的第一个元素,也就是5
  3. 这一帧最终计入总分的分值为10 +5 =15,完全匹配保龄球补中场景的计分规则

基础计分实现参考代码

const frames = [[1, 2], [6, 4], [5, 4], [10, 0], [7, 2], [10, 0], [10, 0], [5, 2], [7, 0], [4, 4]];
let totalScore = 0;

for (let i = 0; i < frames.length; i++) {
  // 最后一帧没有后续奖励,直接累加自身两球得分
  if (i === frames.length -1) {
    totalScore += frames[i][0] + frames[i][1];
    continue;
  }
  const currentFrameSum = frames[i][0] + frames[i][1];
  // 补中场景:当前帧总分10,奖励下一个帧的第一个球得分
  if (currentFrameSum === 10 && frames[i][0] !== 10) {
    totalScore += currentFrameSum + frames[i+1][0];
    continue;
  }
  // 全中场景:当前帧第一球就是10,奖励后面两个球的得分
  if (frames[i][0] === 10) {
    const nextFrameFirst = frames[i+1][0];
    const nextFrameSecond = frames[i+1][1];
    // 遇到连续全中的情况,第二个奖励值要取再下一帧的第一个球
    const bonus = nextFrameSecond === 0 ? frames[i+2][0] : nextFrameSecond;
    totalScore += 10 + nextFrameFirst + bonus;
    continue;
  }
  // 普通非补中、非全中的帧,直接累加自身得分
  totalScore += currentFrameSum;
}
console.log(totalScore); // 运行给定示例帧,输出结果为119

注意:遍历到靠近末尾的帧时,要做好索引越界判断,不要硬取超出数组长度的索引值导致代码报错


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 05:45:08