如何优化JavaScript中的if-else条件判断结构?
优化语音建议生成代码:从冗余if-else到简洁逻辑
原问题代码
const makeRecomendations = (wordsPerMinute, newAverage) => { if (wordsPerMinute <= 119 && (newAverage >=5 && newAverage <=8) && output.length < 1) return 'Увеличьте скорость речи' else if (wordsPerMinute <= 119 && newAverage <=5 && output.length < 1) return 'Увеличьте скорость речи\nГоворите громче' else if (wordsPerMinute <= 119 && newAverage >=8 && output.length < 1) return 'Увеличьте скорость речи\nГоворите тише' else if (wordsPerMinute <= 119 && (newAverage >=8) && output.length >= 1) return 'Увеличьте скорость речи\nГоворите тише\nКонтролируйте употребление слов паразитов' else if (wordsPerMinute <= 119 && (newAverage <=5) && output.length >= 1) return 'Увеличьте скорость речи\nГоворите громче\nКонтролируйте употребление слов паразитов' else if (wordsPerMinute <= 119 && (newAverage >=5 && newAverage <=8) && output.length >= 1) return 'Увеличьте скорость речи\nКонтролируйте употребление слов паразитов' else if (wordsPerMinute >= 180 && (newAverage >=5 && newAverage <=8) && output.length < 1) return 'Не торопитесь во время доклада' else if ((wordsPerMinute >= 119 && wordsPerMinute <= 180) && newAverage <=5 && output.length < 1) return 'Говорите громче' else if ((wordsPerMinute >= 119 && wordsPerMinute <= 180) && newAverage >=8 && output.length < 1) return 'Говорите тише' else if ((wordsPerMinute >= 119 && wordsPerMinute <= 180) && (newAverage >=5 && newAverage <= 8) && output.length >= 1) return 'Контролируйте употребление слов паразитов' else if ((wordsPerMinute >= 119 && wordsPerMinute <= 180) && newAverage <=5 && output.length >= 1) return 'Говорите громче\nКонтролируйте употребление слов паразитов' else if (wordsPerMinute >=180 && newAverage <=5 && output.length >= 1) return 'Не торопитесь во время доклада\nГоворите громче\nКонтролируйте употребление слов паразитов' else if (wordsPerMinute >=180 && (newAverage >=5 && newAverage <= 8) && output.length < 1) return 'Не торопитесь во время доклада' else if (wordsPerMinute >=180 && (newAverage >=5 && newAverage <= 8) && output.length >= 1) return 'Не торопитесь во время доклада\nКонтролируйте употребление слов паразитов' else if (wordsPerMinute <= 119 && (newAverage >=5 && newAverage <= 8) && output.length >= 1) return 'Увеличьте скорость речи' else return "Вы потрясающий спикер!" }
优化思路与代码
核心是把多维度的判断条件拆分成独立逻辑,用数组收集符合条件的建议,最后合并成字符串,避免重复判断和冗余代码:
const makeRecomendations = (wordsPerMinute, newAverage, output) => { const recommendations = []; // 语速相关建议 if (wordsPerMinute <= 119) { recommendations.push('Увеличьте скорость речи'); } else if (wordsPerMinute >= 180) { recommendations.push('Не торопитесь во время доклада'); } // 音量相关建议 if (newAverage <= 5) { recommendations.push('Говорите громче'); } else if (newAverage >= 8) { recommendations.push('Говорите тише'); } // 赘语控制建议 if (output.length >= 1) { recommendations.push('Контролируйте употребление слов паразитов'); } // 无建议时返回赞美 return recommendations.length > 0 ? recommendations.join('\n') : "Вы потрясающий спикер!"; }
优化点说明
- 可读性提升:把语速、音量、赘语三个维度的判断完全拆分,逻辑清晰,一眼能看懂每个条件对应的建议
- 维护性增强:新增或修改建议时,只需在对应区块添加逻辑,不用修改冗长的if-else链
- 消除冗余:原代码中重复的字符串(比如"Увеличьте скорость речи")只出现一次,避免重复维护
- 健壮性提升:原代码存在重复的条件分支(比如第7和第13行逻辑完全一致),优化后彻底消除这类问题
内容的提问来源于stack exchange,提问作者Proger228
相关产品推荐
相关产品推荐

