多行中的JavaScript反向词

时间:2016-12-27 18:11:42

标签: javascript

这是我的代码:

var text = document.getElementById('textarea').value.split(" ").reverse().join(" ");
document.getElementById('textarea').value = text;

当只有一行时它起作用:

LINE ONE > ONE LINE

但是当有多行时:

LINE ONE
LINE TWO

输出是:

TWO ONE
LINE LINE

我想这样:

ONE LINE
TWO LINE

2 个答案:

答案 0 :(得分:7)

按换行符\n拆分数组,用Array#map迭代每一行,然后将其反转,然后将行加回\n

var text = document.getElementById('textarea').value;
var result = text.split('\n').map(function(line) {
  return line.split(" ").reverse().join(" ");
}).join('\n');

document.getElementById('textarea').value = result;
<textarea id="textarea">
LINE ONE
LINE TWO
</textarea>

答案 1 :(得分:0)

您需要在.replace( /\n/g, " " )之前添加.split(" ")。你会得到:

var text = document.getElementById('textarea').value.replace( /\n/g, " " ).split(" ").reverse().join(" ");

发生这种情况的原因是document.getElementById('textarea').value.split(" ")创建的数组包含了换行符。例如,如果您在文本区域中输入以下内容:

 1 2 3 
 4 5 6
 7 8 9

您将返回的数组是[&#34; 9&#34;,&#34; 8&#34;,&#34;6↵7&#34;,&#34; 5&#34;, &#34;3↵4&#34;,&#34; 2&#34;,&#34; 1&#34;]。注意[2]和[4]处的返回字符。

你的LINE ONE LINE TWO示例将是[&#34; TWO&#34;,&#34;ONE↵LINE&#34;,&#34; LINE&#34;]在被撤销之前,[&#34 ;两个&#34;,&#34;ONE↵LINE&#34;,&#34; LINE&#34;]被颠倒后。然后,当你.join()将它们重新变成一个字符串时,你就会得到非常意想不到的两条线。

.replace( /\n/g, " " )会在将字符串分解为数组之前将这些换行符更改为空格,从而为您提供所需的结果。