为什么这个javascript代码不起作用?

时间:2010-12-30 12:35:49

标签: javascript

http://jsfiddle.net/LU3pE/

我希望函数将参数转换为单个字符串并返回它。我做错了什么?

function cooncc(divider, lastdiv){
    var returner;
    for (var i = 0; i < (arguments.length - 2); i++)
    {
        returner += arguments[i+2] + divider;
    }
    returner -= divider;
    returner += lastdiv + arguments[arguments.length - 1];
    return divider;
}
var output = cooncc(", ", ", and ", "Andy", "Becky", "Caitlin", "Dave", "Erica", "Fergus", "Gaby");
document.body.innerHTML = "<h1>" + output + ".</h1>";

6 个答案:

答案 0 :(得分:4)

你犯了很多错误。以下是您需要解决的问题:

  1. 您正在返回divider!将其更改为returner

    return returner;
    
  2. 此行没有达到预期效果:

    returner -= divider
    

    你不能从字符串中减去字符串,除非它们是数字,这就是你在输出中得到NaN(非数字)的原因。

    尝试:

    returner = returner.substring(0,returner.lastIndexOf(divider));
    
  3. 您没有初始化returner。这将使你的字符串“未定义”。初始化为空字符串:

    var returner = "";
    
  4. 您要将最后一个字符串添加两次:一次在循环中,然后最后一次使用最后一个分隔符。只需提前停止循环:

    for (var i = 0; i < (arguments.length - 3); i++)
    
  5. 最后,考虑如果你只用一个字符串来连接这样调用会发生什么:cooncc(", ", ", and ", "Andy")。你可以用一个保护条款来解决这个问题:

    if(arguments.length == 3) return arguments[2];
    

答案 1 :(得分:0)

将参数设为单个字符串?你是说你想要这个输出吗?

, , and AndyBeckyCaitlinDaveEricaFergusGaby

如果,是的,您可以使用代码的这种修改:

function cooncc(divider, lastdiv){
    var returner = "";

    console.log(arguments.length);

    for (var i = 0; i < arguments.length; i++) {
        returner +=  arguments[i];  
    }

    return returner;
}
var output = cooncc(", ", ", and ", "Andy", "Becky", "Caitlin", "Dave", "Erica", "Fergus", "Gaby");
document.body.innerHTML = "<h1>" + output + ".</h1>";

哦,如果您将代码中的最后一位从return divider更改为return returner,那么

NaN, and Gaby

虽然,我不确定这是不是你想要的。

答案 2 :(得分:0)

避开问题,但有更优雅的方法可以做你想做的事情:

var names = ["Andy", "Becky", "Caitlin", "Dave", "Erica", "Fergus", "Gaby"];
var divider = ', ';
var lastDivider = ' and ';

var concatNames = names.slice(0, -1).join(divider) +
                  lastDivider +
                  names[names.length - 1];

alert(concatNames);

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/join
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/slice

答案 3 :(得分:0)

初始化回归者?

var returner = "";

你不能用字符串:

returner -= divider

答案 4 :(得分:0)

你需要初始化返回者,你不能使用 - = with divider。如果你在返回者之后放置警报(返回者) - =分隔符你得到NaN回来。尝试这个修复。

function cooncc(divider, lastdiv){
    var returner = "";
    for (var i = 0; i < (arguments.length - 3); i++)
    {
        returner += arguments[i+2] + divider;
    }
    returner = returner.substring(0,returner.lastIndexOf(divider));
    returner += lastdiv + arguments[arguments.length - 1];
    return returner;
}
var output = cooncc(", ", ", and ", "Andy", "Becky", "Caitlin", "Dave", "Erica", "Fergus", "Gaby");
document.body.innerHTML = "<h1>" + output + ".</h1>";

答案 5 :(得分:0)

你的功能需要重大改写,这是工作版本:

function cooncc(){
    var arrWords = new Array();
    var divider = arguments[0];
    var lastdiv = arguments[1];
    for (var i = 2; i < arguments.length; i++)
    {
        var curWord = arguments[i];
        if (i == arguments.length - 1 && i > 2) {
            arrWords[arrWords.length - 1] += lastdiv + curWord;
        }
        else {
            arrWords.push(curWord);
        }
    }
    return arrWords.join(arguments[0]);
}

(调用它没有变化)

更新了jsFiddle:http://jsfiddle.net/yahavbr/LU3pE/1/

相关问题