我将下面的功能编写为一个更大的应用程序的一部分,该应用程序用于通过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++){
                ...
            }


使用不同的变量,例如ij或更好地选择有意义的名称。

另外,您应该声明变量(var i)以确保它们在函数中是局部的。

最后,使用++i,而不是i++。前者的意思是“递增i”,而后者的意思是“ i,哦,顺便说一下,递增它”。它们都递增i,但后者返回旧值,这是在特殊情况下使用的特殊语言功能。

关于javascript - JavaScript for Loop保持循环无限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26129781/

10-11 13:01
查看更多