为什么我的返回值中有逗号? JavaScript Celebrity Name Revealer

时间:2014-07-10 05:31:51

标签: javascript arrays return-value console.log

这是我的代码,我在返回的消息中的名字之间加了逗号

CodePen: Celebrity Name Revealer

var MarilynMonroe=["Norma", "Jean", "Mortensen"];
var WoodyAllen=["Allen", "Konigsberg"];
var MegRyan=["Margaret", "Mary", "Emily", "Anne Hyra"];

function nameMaker () {
    msg = "The name is ";
    for (i=0; i<arguments.length; i++){
        msg += arguments[i] + " ";
    }
    return(msg);
}

console.log(nameMaker(MarilynMonroe));
console.log(nameMaker(WoodyAllen));
console.log(nameMaker(MegRyan));

我希望它们之间有一个空格,但如果你改变了我添加的字符串中的空格,可以说一个感叹号,你会看到它只是将它附加到整个短语的末尾,这让我感到困惑好。

我已经创建了一个代码笔。

CodePen: Celebrity Name Revealer


我为此问题找到了以下解决方案:

var MarilynMonroe=["Norma", "Jean", "Mortensen"];
var WoodyAllen=["Allen", "Konigsberg"];
var MegRyan=["Margaret", "Mary", "Emily", "Anne Hyra"];

function nameRevealer (names) {
    msg = "This celebrity's real name is ";
    for (i=0; i<names.length; i++){
        msg += names[i] + " ";
    }
    return(msg);
}

console.log(nameMaker(MarilynMonroe));
console.log(nameMaker(WoodyAllen));
console.log(nameMaker(MegRyan));

5 个答案:

答案 0 :(得分:5)

在这种情况下,arguments是一个数组数组(只有一个项目)。要解决此问题,请重新定义nameMaker:

var nameMaker = function(names) {
  return 'The name is ' + names.join(' ');
};

此外,还有一些关于您的代码的其他反馈:

  1. 您应该始终使用“var”声明变量;您定义“msg”和“i”的方式会导致它们成为全局变量,因为您不使用“var”。
  2. 通过重复迭代构造一个字符串时,通常使用列表作为构建器然后使用'join'函数会更快(如果你只是连接一个小的,固定数量的字符串,那么它很简单使用'+';但是,如果你在for循环中做+ =,请切换到'push'和'join'。)

答案 1 :(得分:2)

arguments变量是一个数组:您将数组作为第一个参数传递。发生的事情是它正在迭代arguments数组,并在每个名人阵列上调用。toString(),这会自动添加逗号。你想要的是迭代arguments[0]

类似的东西:

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

答案 2 :(得分:1)

看看这个小提琴http://jsfiddle.net/JayKandari/xdNLj我只是简单地复制了你的小提琴。那是你想要的吗?这些名字之间的空格?

    var MarilynMonroe=["Norma", "Jean", "Mortensen"];
    var WoodyAllen=["Allen", "Konigsberg"];
    var MegRyan=["Margaret", "Mary", "Emily", "Anne Hyra"];

    function nameMaker (names) {
        msg = "The name is ";
        for (i=0; i<names.length; i++){
            msg += names[i] + " ";
        }
        document.getElementById("message").innerText = (msg);
            return(msg);
    }

nameMaker(MarilynMonroe);
nameMaker(WoodyAllen);
nameMaker(MegRyan);

答案 3 :(得分:0)

Javascript已经将arguments作为数组,因此您不需要传递数组。

像这样调用你的函数。

console.log(nameMaker("Norma", "Jean", "Mortensen"));

OR

更改您的功能添加参数names并在names而不是arguments上执行操作。

答案 4 :(得分:0)

添加参数变量function nameMaker (name) 然后将所有argument更改为name

var MarilynMonroe=["Norma", "Jean", "Mortensen"];
var WoodyAllen=["Allen", "Konigsberg"];
var MegRyan=["Margaret", "Mary", "Emily", "Anne Hyra"];

function nameMaker (name) {
    msg = "The name is ";
    for (i=0; i<name.length; i++){
        msg += name[i] + " ";
    }
    return(msg);
}
console.log(nameMaker(MarilynMonroe));
console.log(nameMaker(WoodyAllen));
console.log(nameMaker(MegRyan));