0

我正在尝试制作一个将句子拆分为单词然后将单词拆分为字符并将每个单词的第一个字母大写的函数。是的,这是家庭作业,经过多次尝试,我无法让它工作。让我绊倒的一件事是使用 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>
4

3 回答 3

3

你很接近:

> characterArray[0].toUpperCase();

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

> wordArray[i]=characterArray.join;

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

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

应该做的伎俩。

于 2012-12-14T02:55:49.580 回答
2

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

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

...但您也可以使用charAt()and 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(); })

于 2012-12-14T02:51:57.953 回答
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/

于 2012-12-14T03:07:37.600 回答