介绍
“如何逆向输出JavaScript中的字符串?”是面试中最常被问到的问题之一,尤其是如果你是一名新人或者缺乏经验的话。可能有几十种方法可以倒转一个字符串。然而,在本文中,我们将学习在JavaScript中倒转字符串的三种不同方法。
我们将在本文中使用的字符串是“hello world!”但是,这些方法可以处理您想要反转的任何字符串。
const str = 'hello world!';
// 逆向输出的结果: !dlrow olleh使用Split, Reverse, Join
在第一个方法中,我们将使用JavaScript内置的split、reverse和join方法来逆转字符串。
const str = 'hello world!';
// 步骤 1:
const strChunks = str.split("");
console.log(strChunks); // 输出: ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]
// 步骤 2:
const strChunksReverse = strChunks.reverse();
console.log(strChunksReverse); // 输出: ["!", "d", "l", "r", "o", "w", " ", "o", "l", "l", "e", "h"]
// 步骤 3:
const strReverse = strChunksReverse.join("");
console.log(strReverse); // 输出: !dlrow olleh
正如您在上面的代码中看到的,在第一步中,我们使用split方法将字符串“hello world”分割成一个数组,数组中的每个元素表示字符串的单个字符。传递给split方法的参数是一个没有空格的空字符串。下一步,我们将使用JavaScript的原生reverse方法对数组中的元素进行反转。在最后一步,我们用join方法连接数组元素也就是字符串的字符。
我们不必将每个操作写在单独的语句中,而是将方法链接起来,并在一行中执行所有操作。
const str = 'hello world!';
const strReverse = str.split('').reverse().join('');
console.log(strReverse); // 输出: !dlrow olleh
上面的代码片段将产生与前一个代码块相同的输出。
使用 for循环
接下来,我们将使用一个简单的for循环来反转字符串
const str = "hello world!";
let strReverse = "";
for (let i = str.length - 1; i >= 0; i--) {
strReverse = strReverse + str[i];
}
console.log(strReverse);
// 输出: !dlrow olleh
正如您在上面的代码片段中所看到的,我们正在创建一个变量strReverse,它包含一个空字符串(其中不包含空格)。接下来我们要做的是,我们要用for循环遍历需要反转的字符串。循环中i的初始值是str.length - 1。在每次迭代之后,我们都会递减i的值。循环将继续,直到它到达字符串的第一个字符,即单词hello中的h。在每次迭代中,我们都将字符连接到strReverse变量。
使用递归
我们也可以使用递归反转字符串,递归只是一个函数直接或间接调用自身的过程。
const message = "hello world!";
function reverse(value) {
return value === '' ? '' : reverse(value.slice(1)) + value.charAt(0);
};
console.log(reverse(message));
// 输出: !dlrow olleh
上面的函数做的第一件事是检查作为参数传递给它的字符串是否为空。如果是,它将返回一个空字符串。如果条件为false,它将简单地调用自己并再次传递字符串值,但这一次它将删除第一个字符并传递字符串的其余部分,并在return语句的末尾追加第一个字符。
让我们用一个更简单的例子来理解这一点。假设我们将字符串'abc'传递给函数:
console.log(reverse('abc')); // 输出: cba
上面的代码将调用反向函数四次。第一次我们手动调用它,3次它会用递归调用自己。
第一次:reverse('abc')将返回reverse('bc') + 'a'第二次:reverse('bc')将返回reverse('c') + 'ba'第三次:反向('c')将返回反向(") + 'cba'第四次:reverse("),它将返回一个空字符串,结束递归过程。