求助:修复处理连续'flick'时失效的布尔值切换函数
求助:修复处理连续'flick'时失效的布尔值切换函数
兄弟,你的问题我一眼就看出来了——你处理'flick'的逻辑错在直接把flag设为false,而不是真正的“切换”状态!
你对需求的理解完全没问题:就是需要一个开关,初始是true,每次碰到'flick'就翻转开关(true变false,false变true),不管是这个'flick'本身还是后面的元素,都要遵循翻转后的状态。但你现在的代码里,每次遇到'flick'都强制把flag改成false,这就导致连续遇到'flick'时,开关不会往回切,一直停在false,结果自然就不对了。
直接给你修正你的原代码,改动非常小,核心就是把flag = false;改成flag = !flag;:
function flickSwitch(arr) { let flag = true let array = []; for (let i = 0; i < arr.length; i++) { if (arr[i].toLowerCase() == 'flick') { // 核心修正:翻转当前flag的状态,而非直接设为false flag = !flag; } // 不管当前元素是不是flick,都把当前的flag值加入结果数组 array.push(flag); } return array; }
我给你拆解下关键逻辑:
flag = !flag的意思是取当前flag的相反值,第一次遇到flick时true变false,第二次遇到时false又变回true,以此类推,这才是题目要求的“切换开关”效果- 把
array.push(flag)移到if语句外面,这样不管当前项是不是flick,都会把当前的开关状态加入结果数组——这也符合题目里“flick项本身也要返回切换后状态”的要求
你可以测试之前出错的用例,比如["codewars", "flick", "flick", "wars"],修正后的函数会返回[true, false, true, true],完全正确。再测题目里的连续flick例子["flick", "flick", "flick", "flick", "flick"],会得到[false, true, false, true, false],和题目要求的结果完全匹配。
内容来源于stack exchange
相关产品推荐
相关产品推荐

