如何简化国际象棋工具应用中判断颜色和步数的重复JavaScript代码
优化思路
首先先梳理你原有代码的隐含规律:
- 所有分支下
max永远等于time - timeA,可以直接提取到分支外,不需要重复声明 - 嵌套的四层分支本质只需要判断一个核心逻辑:当前落子轮次是否和用户执棋颜色匹配,完全可以合并判断条件消除嵌套
方案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
相关产品推荐
相关产品推荐

