Camelcase在Javascript中使用split()两次

时间:2012-12-14 02:39:58

标签: javascript

我正在尝试创建一个函数将一个句子分成单词然后将单词拆分成字符并将每个单词的第一个字母大写。是的,这是家庭作业,经过多次尝试,我无法让它发挥作用。绊倒我的一件事是使用split()两次。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
    <title>Sentence Case Conversion</title>
    <script type= "text/javascript">
    /* <![CDATA[ */
    /* ]]> */
    </script>
</head>

<body>
    <form name= "convertText">
        <p>Enter text to convert to sentence case:</p>
        <input type ="text" size ="120" name="userInput">
        </br>
        </br>

        <input name= "Submit" onclick= "sentenceCase()" value= "Convert Text" type= "button">
    </form>

        </br>
        </br>
        </br>

        <form name= "ouputText">
        <p>Here is your converted text:</p>
        <input type="text" size="120" name="result">
            <script type= "text/javascript">
            /* <![CDATA[ */
            function sentenceCase() {

                var userInput = document.forms[0].userInput.value;        //get user input
                var wordArray = userInput.split(" ");                     //split user input into individual words

                for (var i=0; i<wordArray.length; i++) { 
                     var characterArray = wordArray[i].split("");
                     characterArray[0].toUpperCase();
                     wordArray[i]=characterArray.join;
                }

            /* ]]> */
            </script>
</body>
</html>

3 个答案:

答案 0 :(得分:3)

你很亲密:

> characterArray[0].toUpperCase();

返回一个值,它不会就地修改

> wordArray[i]=characterArray.join;

join是一种方法,你必须调用它。此外,它返回一个值,它不会修改任何适当的位置。您可以考虑使用子字符串,但使用数组:

var firstChar = characterArray.shift().toUpperCase();
var newWord = firstChar + characterArray.join('');

应该这样做。

答案 1 :(得分:2)

toUpperCase()无法修改您的变量;它返回大写字符串。所以:

characterArray[0] = characterArray[0].toUpperCase();

...但您也可以使用charAt()substring()

wordArray[0] = wordArray[0].charAt(0).toUpperCase() + wordArray[0].substring(1);

...然后你必须实际调用join()

wordArray[i] = characterArray.join();

...你可能想传递一个空字符串,或者它默认为逗号作为分隔符。

尽管有趣的方式是'hello world this is camel case'.replace(/\s(\S)/g, function($0, $1) { return $1.toUpperCase(); })

答案 2 :(得分:1)

将常见元素分解为易于理解的代码:

function toCamelCase(sentence) {
    var words = sentence.split(" ");
    var length = words.length;

    for (var i = 1; i < length; i++)
        words[i] = capitalize(words[i]);
    return words.join("");
}

function capitalize(word) {
    return word.charAt(0).toUpperCase() + word.slice(1);
}

现在您可以将句子转换为大写。在转换之前从句子中删除标点符号可能是个好主意。以下是一些例子:

alert(toCamelCase("java script")); // javaScript
alert(toCamelCase("json to XML")); // jsonToXML
alert(toCamelCase("ECMA script")); // ECMAScript

最后一个似乎是PascalCase,但仍然被认为是有效的camelCase。您可以在此处查看演示:http://jsfiddle.net/GhKmf/