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

如何简化国际象棋工具应用中判断颜色和步数的重复JavaScript代码

优化思路

首先先梳理你原有代码的隐含规律:

  1. 所有分支下max永远等于time - timeA,可以直接提取到分支外,不需要重复声明
  2. 嵌套的四层分支本质只需要判断一个核心逻辑:当前落子轮次是否和用户执棋颜色匹配,完全可以合并判断条件消除嵌套

方案1:极简行内实现(单场景使用)

通过等值判断匹配状态,用数组解构一次性完成赋值,代码量缩减70%以上:

// 直接提取公共的max赋值
max = time - timeA;
// 合并判断:当前白方回合和用户执白是否匹配,不匹配时黑白赋值互换
const isMatch = (length % 2 === 0) === (userColor === 'white');
[white, black] = isMatch ? [time - timeA, time - timeB] : [time - timeB, time - timeA];

方案2:抽成公共工具函数(多场景复用)

如果多个地方都要用到执棋颜色和落子轮次的判断逻辑,可以直接把计算逻辑封装成通用函数,彻底消除重复代码:

// 全局复用的工具函数,逻辑修改只需要改这一处
function calculateChessTime(userColor, moveLength, totalTime, timeA, timeB) {
  const deltaA = totalTime - timeA;
  const deltaB = totalTime - timeB;
  const isUserTurn = (userColor === 'white') === (moveLength % 2 === 0);
  const userSide = userColor;
  const opponentSide = userColor === 'white' ? 'black' : 'white';

  const result = {
    max: deltaA,
    [userSide]: isUserTurn ? deltaA : deltaB,
    [opponentSide]: isUserTurn ? deltaB : deltaA
  };
  return result;
}

// 业务侧调用只需要一行
const { max, white, black } = calculateChessTime(userColor, length, time, timeA, timeB);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:24:03