我希望函数将参数转换为单个字符串并返回它。我做错了什么?
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>";
答案 0 :(得分:4)
你犯了很多错误。以下是您需要解决的问题:
您正在返回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];
答案 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/