[英]Why isn't this javascript code working?
我希望函數將參數轉換為單個字符串並返回它。 我做錯了什么?
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>";
你做了很多錯事。 以下是您需要修復的細分:
你正在返回divider
! 將其改為returner
:
return returner;
這條線不符合您的期望:
returner -= divider
你不能從字符串中減去字符串,除非它們是數字,這就是你在輸出中得到NaN(非數字)的原因。
嘗試:
returner = returner.substring(0,returner.lastIndexOf(divider));
你沒有初始化returner
。 這將使你的字符串“未定義”。 初始化為空字符串:
var returner = "";
您將最后一個字符串添加兩次:一次在循環中,然后最后一次使用最后一個分隔符。 只需先停止循環:
for (var i = 0; i < (arguments.length - 3); i++)
最后,想想如果你只用一個字符串來連接它就會發生什么: cooncc(", ", ", and ", "Andy")
。 您可以使用保護條款解決此問題:
if(arguments.length == 3) return arguments[2];
將參數組成一個字符串? 你的意思是你想要這個輸出嗎?
, , 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
雖然,我不確定這是不是你想要的。
避開問題,但有更優雅的方式來做你想做的事情:
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
初始化回歸者?
var returner = "";
你不能用字符串:
returner -= divider
你需要初始化返回者,你不能使用 - = 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>";
你的功能需要重大改寫,這里是工作版:
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/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.