我将下面的功能编写为一个更大的应用程序的一部分,该应用程序用于通过Web界面处理FASTA格式的文件。由于某种原因,它决定在makePretty()中调用baseCounts()函数时遇到无限大的问题。可能值得注意的是,两个函数都由同一个父函数封装。
函数baseCounts()以100多个长数组的形式返回有效数据,console.log确认这不是罪魁祸首,因此问题必须出在makePretty()上。
欢迎任何帮助。
function baseCount(records){
// Count instances of Bases in array
var basecounts = Array();
for (i=0; i < records.length; i++){
var record = records[i];
console.log(record);
var count = [record.match(/A/g), record.match(/T/g), record.match(/C/g), record.match(/G/g)];
var basecount = Array();
for (i=0; i < count.length; i++){
basecount.push(count[i].length);
}
// return array of occurance
basecounts.push(basecount);
}
}
function makePretty(fasta){
// Make FASTA more human friendly
var data = Array();
var basecounts = Array();
var bases = Array();
console.log(fasta.length);
// Generate base array
for (i=1; i < fasta.length; i++){
bases.push(fasta[i][2])
}
basecounts = baseCount(bases); // RUNS INTO INFINITY
for (i=0; i < fasta.length; i++){
var record = Array();
record.push(i); // Add protein number
record.push(fasta[i][0]); // Add NC_#
record.push(fasta[i][1]); // Add base index
_record = fasta[i][2];
var l_record = _fasta.length; // Protein length
//var basecount = baseCount(_record);
var cg_content;
}
}
最佳答案
您的嵌套循环使用相同的变量i
,并且破坏了彼此的状态。
for (i=0; i < records.length; i++){
...
for (i=0; i < count.length; i++){
...
}
使用不同的变量,例如
i
和j
或更好地选择有意义的名称。另外,您应该声明变量(
var i
)以确保它们在函数中是局部的。最后,使用
++i
,而不是i++
。前者的意思是“递增i”,而后者的意思是“ i,哦,顺便说一下,递增它”。它们都递增i
,但后者返回旧值,这是在特殊情况下使用的特殊语言功能。关于javascript - JavaScript for Loop保持循环无限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26129781/