我正在尝试撤消输入字符串
var oneway = $('#inputfield').val();
var backway = oneway.reverse();
但是萤火虫告诉我oneway.reverse()
不是一个功能。有什么想法吗?
谢谢
答案 0 :(得分:113)
reverse()
是一个数组实例的方法。它不会直接用于字符串。您应该首先将字符串的字符拆分为数组,反转数组,然后再连接回字符串:
var backway = oneway.split("").reverse().join("");
<强>更新强>
上述方法仅适用于“常规”字符串。请参阅以下Mathias Bynens的评论以及his answer的安全反向方法。
答案 1 :(得分:72)
以下技术(或类似技术)通常用于在JavaScript中反转字符串:
// Don’t use this!
var naiveReverse = function(string) {
return string.split('').reverse().join('');
}
事实上,到目前为止发布的所有答案都是这种模式的变体。但是,此解决方案存在一些问题。例如:
naiveReverse('foo bar');
// → 'rab �� oof'
// Where did the `` symbol go? Whoops!
如果您想知道为什么会这样,read up on JavaScript’s internal character encoding。 (TL; DR:是星号符号,JavaScript将其公开为两个独立的代码单元。)
但还有更多:
// To see which symbols are being used here, check:
// http://mothereff.in/js-escapes#1ma%C3%B1ana%20man%CC%83ana
naiveReverse('mañana mañana');
// → 'anãnam anañam'
// Wait, so now the tilde is applied to the `a` instead of the `n`? WAT.
测试字符串反向实现的一个好字符串是the following:
'foo bar mañana mañana'
为什么呢?因为它包含星体符号()(represented by surrogate pairs in JavaScript)和组合标记(最后
ñ
中的mañana
实际上由两个符号组成:U + 006E拉丁文小写字母N和U + 0303组合TILDE)。
代理对出现的顺序无法逆转,否则星号符号将不再出现在“反向”字符串中。这就是为什么你在上一个例子的输出中看到那些��
标记的原因。
组合标记始终应用于上一个符号,因此您必须将主符号(U + 006E LATIN SMALL LETTER N)作为组合标记(U + 0303 COMBINING TILDE)整体处理。反转它们的顺序将使组合标记与字符串中的另一个符号配对。这就是为什么示例输出有ã
而不是ñ
。
希望这可以解释为什么到目前为止发布的所有答案都错误。
要回答您的初始问题 - 如何[正确]反转JavaScript中的字符串 - ,我编写了一个能够识别Unicode的字符串反转的小型JavaScript库。它没有我刚才提到的任何问题。该库名为Esrever;它的代码在GitHub上,几乎适用于任何JavaScript环境。它带有一个shell实用程序/二进制文件,因此如果需要,您可以轻松地从终端中反转字符串。
var input = 'foo bar mañana mañana';
esrever.reverse(input);
// → 'anañam anañam rab oof'
答案 2 :(得分:8)
String.prototype.reverse = function () {
return this.split("").reverse().join("");
}
受到the first result的启发,当我为javascript string reverse创建Google时,我获得了启发。
答案 3 :(得分:4)
// You could reverse a string without creating an array
String.prototype.reverse= function(){
var s= '', L= this.length;
while(L){
s+= this[--L];
}
return s;
}
var s1= 'the time has come, the walrus said, to speak of many things';
s1.reverse()
/*returned value: (String)
sgniht ynam fo kaeps ot, dias surlaw eht, emoc sah emit eht
*/
答案 4 :(得分:4)
Google更难,兄弟。这是由Edd Mann。
function reverse (s) {
for (var i = s.length - 1, o = ''; i >= 0; o += s[i--]) { }
return o;
}
http://eddmann.com/posts/ten-ways-to-reverse-a-string-in-javascript/
答案 5 :(得分:3)
reverse
是数组上的函数,它是一个字符串。您可以将字符串分解为数组,然后将其反转,然后将其重新组合在一起。
var str = '0123456789';
var rev_str = str.split('').reverse().join('');
答案 6 :(得分:1)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function () {
$("#stringInput").keyup(function () {
debugger;
var string = $("#stringInput").val();
var stringArray = [];
sInput = string.toString();
for (var i = 0, len = sInput.length; i < len; i++) {
stringArray.push(sInput.charAt(i));
}
stringArray.reverse();
str = stringArray.join('');
document.getElementById("stringOutput").value = str;
});
$("button").click(function () {
debugger;
$("#myForm").toggle();
});
});
</script>
</head>
<body>
<div>
<form name="myForm" id="myForm">
<table>
<tr>
<td>Insert Elements :</td>
<td><input type="text" name="stringInput" id="stringInput"/></td>
<td>Output :</td>
<td><input type="text" id="stringOutput" name="stringOutput" readonly="true" /></td>
</tr>
</table>
</form>
<button>Show/Hide</button>
</div>
</body>
</html>
答案 7 :(得分:1)
这可能是所有浏览器都可接受的方式:
function reverse(s) {
var o = '';
for (var i = s.length - 1; i >= 0; i--)
o += s[i];
return o;
}
称之为魅力:
reverse('your_string');
答案 8 :(得分:0)
我认为你会发现事实上reverse()不是jQuery中的一个函数。顺便说一句,jQuery非常擅长操作你的DOM,但实际上并不是用于字符串操作(虽然你可以自己编写/编写自己的插件)。
我发现在javascript中反转字符串的最佳方法是执行以下操作:
String.prototype.reverse = function(){
splitext = this.split("");
revertext = splitext.reverse();
reversed = revertext.join("");
return reversed;
}
发现于:http://www.bytemycode.com/snippets/snippet/400/
我想你会发现,如果你把上面的代码弹到你的代码中,你对.reverse()的调用应该有效:)
答案 9 :(得分:0)
Mathias Bynens,您的代码非常感谢,非常感谢!
我将您的代码转换为函数,这样用户就可以从这里复制它。
谢谢!
//The function reverse a string, JavaScript’s has internal character encoding so we are
//unable to reverse the string in the "easy ways". For example the TL;DR: is an astral
//symbol, and JavaScript exposes it as two separate code units.
function ReverseString(string){
//-
var regexSymbolWithCombiningMarks = /([\0-\u02FF\u0370-\u1DBF\u1E00-\u20CF\u2100-\uD7FF\uDC00-\uFE1F\uFE30-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF])([\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]+)/g;
var regexSurrogatePair = /([\uD800-\uDBFF])([\uDC00-\uDFFF])/g;
//-
//Step 1: deal with combining marks and astral symbols (surrogate pairs)
string = string
//Swap symbols with their combining marks so the combining marks go first
.replace(regexSymbolWithCombiningMarks, function($0, $1, $2) {
return reverse($2) + $1;
})
// Swap high and low surrogates so the low surrogates go first
.replace(regexSurrogatePair, '$2$1');
// Step 2: reverse the code units in the string
var result = '';
var index = string.length;
while (index--) {
result += string.charAt(index);
}
//Return value
return result;
}
答案 10 :(得分:0)
这个反向原型功能是使用“this”实现的。 如果您看到“this”的日志控制台,它将生成数组,并且它具有length属性。 这样!!!只需使用反向“for-loop”,如代码段所示。
String.prototype.reverse = function () {
console.log(this);
var result = "";
var len = this.length;
for (i = (len-1); i >= 0 ; i--) {
result += this[i];
}
return result;
};
alert("elahnu jaknap".reverse());
答案 11 :(得分:0)
使用这个简单的方法来反转其位置
的字符串
function fun(str){
var arr1=str.split(' ');
console.log(arr1);
var strings='',rever='';
for(var i=0;i<arr1.length;i++)
{
strings=arr1[i].split('');
rever+=strings.reverse().join('')+' ';
}
console.log(rever.split(' '));
console.log(rever.trim());
};
fun('javascript is fun');
答案 12 :(得分:0)
如果有必要还原字符串,但返回错误的原始值:
function reverseString(s) {
let valuePrintS;
try {
valuePrintS = s.split("").reverse().join("");
} catch {
console.log("s.split is not a function");
valuePrintS = s;
} finally {
console.log(valuePrintS);
}
}
答案 13 :(得分:0)
使用带有错误处理功能的函数参数反转字符串:
function reverseString(s)
{
try
{
console.log(s.split("").reverse().join(""));
}
catch(e)
{
console.log(e.message);
console.log(s);
}
}
答案 14 :(得分:-1)
String.prototype.strReverse = function() {
var newstring = "";
for (var s=0; s < this.length; s++) {
newstring = this.charAt(s) + newstring;
}
return newstring;
};