JavaScript实现DNA互补链函数返回数组出现多余元素问题排查
问题原因
- 你将存储互补链的数组
dnaComStrand声明在了函数外部,属于全局作用域变量,它的内容会在多次函数调用之间保留,不会自动清空。 - 第一次调用
DNAStrand('GCATA')时,循环执行了5次,给dnaComStrand的索引0到4都完成赋值,数组长度变为5。 - 第二次调用
DNAStrand(['T', 'C', 'G'])时,传入的参数长度是3,循环仅执行到i=2,只修改了dnaComStrand索引0、1、2的内容,索引3、4的旧值没有被覆盖,因此最终返回的数组仍然是长度为5,后两位就是第一次调用残留的多余元素。
修正方案
把dnaComStrand的声明移到函数内部,每次调用函数都会创建一个全新的空数组存储本次的互补链,不会残留上一次调用的内容,修正后代码如下:
const DNAStrand = function(dnaStrand) { // 每次调用新建空数组,避免跨调用数据残留 let dnaComStrand = []; for (let i = 0; i < dnaStrand.length; i++) { if (dnaStrand[i] === `A`) { dnaComStrand[i] = `T`; } else if (dnaStrand[i] === `T`) { dnaComStrand[i] = `A`; } else if (dnaStrand[i] === `C`) { dnaComStrand[i] = `G`; } else if (dnaStrand[i] === `G`) { dnaComStrand[i] = `C`; } } // 若需要返回字符串格式的互补链可打开下方注释 // return dnaComStrand.join(``); return dnaComStrand; }; console.log(DNAStrand(`GCATA`)); // 输出 ["C", "G", "T", "A", "T"] console.log(DNAStrand([`T`, `C`, `G`])); // 输出 ["A", "G", "C"]
内容的提问来源于stack exchange,提问作者user17316007
相关产品推荐
相关产品推荐

