JavaScript数组和拆分问题

JavaScript数组和拆分问题,javascript,arrays,html,split,Javascript,Arrays,Html,Split,请看下面的代码 <!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Properties. To change this template file, choose Tools | Templates and open the template in the editor. --> <html> <head>

请看下面的代码

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">

        <script>

            function ttsSpeak(text)
            {

                var textArray = text.split(" ");
                var finalString="";

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

                alert(finalString);
            }
        </script>

    </head>
    <body>
        <div><p id="text">In meteorology surface.
            </p></div>
        <div><button id="speak" onclick="ttsSpeak(document.getElementById('text').innerHTML);">Speak</button></div>
    </body>
</html>
但是,我得到了下面的答案


我在这里做错了什么?

innerHTML在结尾包含所有空格(即
)-这被拆分为空字符串(“”),然后在结尾连接

在空白处拆分的一般方法是使用
/\s+/
(在尽可能多的空白处拆分),之前可能会进行修剪

“foo”.split(“”/->[“foo”、“”、“”、“”、“”、“”、“”、“”]
“foo”.split(/\s+/)/->[“foo”,“”]
“foo”.trim().split(/\s+/)/->[“foo”]
使用
/\s+/
也会隐式地“修复”换行问题


(另请参见Amadan指出的内容。)

为了帮助您将原因可视化,如果您将HTML中的所有空格替换为下划线,则文本段落如下所示:

<p id="text">In_meteorology_surface.
____________</p>

在地面气象中。 ____________

文本后面有一个换行符,第二行后面有一堆空格

您可以在拆分文本之前修剪文本,也可以在可能的多个空格上拆分文本

另外,您可能不想在语句中使用
innerHTML
,而是
textContent

您在
textary
中的每个项目后都添加了加号,即使在最后一次迭代中也是如此。你可以用它来代替


加价


如上所述,还有额外的空白。 将来,为了避免在使用split时出现不明显的空白,可以在split之前使用trim()函数

就你而言:

text = text.trim();
var textArray = text.split(" ");

您的textArray包含值为“”的元素,一个空格,原因是(介于

之间):


关于javascript中数组过滤器的进一步阅读是在for循环中,您可以编写这个finalString=finalString+textary[i]+“+”;它将给出您的预期输出。

谢谢您的回复+从我这里得到1分!谢谢你的回复+从我这里得到1分!谢谢你的回复+从我这里得到1分!
finalString = finalString+textArray[i]+"+";
<p id="text">In meteorology surface.
            </p>
alert(text.trim().split(" ").join("+")+"+");
text = text.trim();
var textArray = text.split(" ");
<p id="text">In meteorology surface.
            </p>
function isSpace(element){
 if(element != " " || element != "") return element;
}
textArrayWithoutEmptyObjects = textArray.filter(isSpace));