2010-12-30 7 views
1

http://jsfiddle.net/LU3pE/このjavascriptコードが動作しないのはなぜですか?

引数に1つの文字列を作成して返すようにします。何を私は間違ってやったのですか?

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>"; 

答えて

4

あなたは多くのことを間違っています。

  1. あなたは修復する必要があるものの内訳を示します。dividerを返すようになりました。 returnerにそれを変更します。

    return returner; 
    
  2. この行は何を期待しません。

    returner -= divider 
    

    彼らは数字でない限りあなたは、文字列から文字列を引くことができない、とあなたがNaN(not-を得る理由ですa-number)を出力します。

    試してみてください。

    returner = returner.substring(0,returner.lastIndexOf(divider)); 
    
  3. あなたはreturnerを初期化しませんでした。それはあなたの文字列にあなたの "未定義"を取得します。あなたが二回最後の文字列を追加している

    var returner = ""; 
    
  4. :一回のループで、その後、最後にもう一度、最後の分圧器で空の文字列に初期化します。ちょうど1以前のループを停止します。

    for (var i = 0; i < (arguments.length - 3); i++) 
    
  5. を最後に、あなたが連結するだけで1つの文字列で、このようにそれを呼び出すとどうなるかを考える:cooncc(", ", ", and ", "Andy")。あなたはガード句でこの問題を解決することができます

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

は、単一の文字列に引数を作りますか?この出力が必要なのですか?

, , and AndyBeckyCaitlinDaveEricaFergusGaby 

はい、あなたはあなたのコードのこの変更を使用することができ、場合:あなたはreturn dividerからreturn returnerにあなたのコードの最後のビットを変更した場合と、あなたは

NaN, and Gaby 
を取得し、

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>"; 

ああ

でも、これがあなたが望むものかどうかはわかりません。

0

質問をSidesteppingが、あなたは何をしたいのか行うにはよりエレガントな方法があります:

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

0

は戻しを初期化?

var returner = ""; 

そして、あなたは文字列で行うことはできません。

returner -= divider 
0

あなたは戻しを初期化する必要があり、あなたが使用することはできません - =分割器を使って。 returner - = dividerの後にalert(returner)を置くと、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>"; 
0

主要な書き換えを必要としてあなたの機能、ここでは作業バージョンです:http://jsfiddle.net/yahavbr/LU3pE/1/

:jsFiddleを更新しました

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]); 
} 

(それを呼び出すことで変更なし)

は、

関連する問題