在javascript中将值传递给函数

时间:2015-07-12 20:09:51

标签: javascript

不确定为何以下代码无效。它应该采用一个字符串并将G转换为C,将A转换为T,反之亦然。但是,它收集输入字符串但不提供任何输出,即警报只是说"这是你的反向补充DNA"

var dnaSequence = prompt("Enter your DNA sequence here", "");
var newSequence = reverseComplement(dnaSequence);
alert("here is your reverse complemented DNA: " + newSequence);

function reverseComplement(dnaString) {

    var reverseC = [];
    var dnaArr = dnaString.split('');

    for (var i = 0; i < dnaArr.length; i++) {

        switch (dnaArr[i]) {
            case 'A':
                reverseC.push('T');
                break;
            case 'T':
                reverseC.push('A');
                break;
            case 'C':
                reverseC.push('G');
                break;
            case 'G':
                reverseC.push('C');
                break;
        }
    }

    // Reverse and rejoin the the string    
    return reverseC.reverse().join('');
}

2 个答案:

答案 0 :(得分:1)

  

它应该包含一个字符串并将G转换为C,将A转换为T,反之亦然。

然后你不需要反向(),因为你正在按顺序推进。

此外,请确保在提示中输入大写字母。 否则,你可以强制大写。

这是包含两个修复程序的代码:

function reverseComplement(dnaString) {

    var reverseC = [];
    var dnaArr = dnaString.toUpperCase().split('');

    for (var i = 0; i < dnaArr.length; i++) {

        switch (dnaArr[i]) {
            case 'A':
                reverseC.push('T');
              break;
            case 'T':
                reverseC.push('A');
                break;
            case 'C':
                reverseC.push('G');
                break;
            case 'G':
                reverseC.push('C');
                break;
        }
    }

    // Reverse and rejoin the the string    
    return reverseC.join('');
}

var dnaSequence = prompt("Enter your DNA sequence here", "");
var newSequence = reverseComplement(dnaSequence);
alert("here is your reverse complemented DNA: " + newSequence);

答案 1 :(得分:0)

这里需要的主要教训是如何测试和调试JavaScript代码。

首先,熟悉浏览器中的JavaScript调试器。而不是想知道为什么你的代码不起作用,你可以直接看到它在做什么。每个现代浏览器都有内置的JavaScript调试工具;例如,这里是introduction to the Chrome DevTools

其次,当您测试这样的功能时,请不要使用prompt()alert()。相反,提供硬编码输入字符串并使用console.log()在JavaScript调试控制台中显示输出。这样,您可以重复运行相同的测试用例。在让一个测试用例工作后,您可以添加其他测试用例。

如果你想获得一些幻想,有几个JavaScript测试框架,但首先,只需使用硬编码输入和console.log()输出以及JavaScript调试器中的检​​查就可以了。

为了在第一次编写函数时轻松调试函数,请在开头添加debugger;语句。然后它将在调试器中停止,您可以单步执行代码,以查看函数的哪些部分实际执行,以及在每一步中所有变量值是什么。

例如(因为听起来你错误地使用小写输入进行测试),你可能会这样做:

var dnaSequence = 'actg';
var newSequence = reverseComplement(dnaSequence);
console.log(newSequence);

function reverseComplement(dnaString) {
    debugger;

    var reverseC = [];
    var dnaArr = dnaString.split('');

    for (var i = 0; i < dnaArr.length; i++) {

        switch (dnaArr[i]) {
            case 'A':
                reverseC.push('T');
                break;
            case 'T':
                reverseC.push('A');
                break;
            case 'C':
                reverseC.push('G');
                break;
            case 'G':
                reverseC.push('C');
                break;
        }
    }

    // Reverse and rejoin the the string    
    return reverseC.reverse().join('');
}

现在,如果您打开DevTools,它将在函数第一行的调试器中停止。您可以单步执行该功能以查看它实际进入哪个case语句,您将看到它不会转到其中任何一个语句。您还可以查看dnaArr[i]的值,看看它是否与任何case值匹配。