当一个字符串被传递给一个带有返回语句的函数时,你如何在JavaScript中反转它,而不使用内置函数(.reverse(), . charat()等)?


当前回答

我们可以从字符串数组的两端开始迭代:start和end,并在每次迭代中交换。

function reverse(str) {
 let strArray = str.split("");
 let start = 0;
 let end = strArray.length - 1;

 while(start <= end) {
  let temp = strArray[start];
  strArray[start] = strArray[end];
  strArray[end] = temp;

  start++;
  end--;
 }
 return strArray.join("");
}

虽然操作次数减少了,但其时间复杂度仍为O(n) 操作的数量仍然与输入的大小成线性比例。

参考: 阿尔戈日报

其他回答

我想,这对你有用

function reverse(str){
    str = str.split("").reverse().join("").split(" ").reverse().join(" ");
    console.log(str)
}

如果您对性能和时间复杂度更感兴趣,可以使用此方法。在这个方法中,我将字符串分为两部分,并按照长度/2次循环迭代进行排序。

Let STR = "abcdefghijklmnopqrstuvwxyz" 函数反向(str) { Let store = "" 让store2 = "" (让我= str.length / 2, > = 0;我——){ 如果(str.length % 2 ! = = 0) { store += str.charAt(i) str.slice((str.length/2)+1, str.length).charAt(i) 其他}{ += str.charAt(i-1) str.slice((str.length/2), str.length).charAt(i) } } 返回store2 +存储 } console.log(反向(str))

这不是最优的,但我们可以这样想。

好的,很简单,你可以创建一个简单的循环函数来为你反向字符串,而不需要使用reverse(), charAt()等,就像这样:

例如,你有这样一个字符串:

var name = "StackOverflow";

创建一个这样的函数,我称之为reverseString…

function reverseString(str) {
  if(!str.trim() || 'string' !== typeof str) {
    return;
  }
  let l=str.length, s='';
  while(l > 0) {
    l--;
    s+= str[l];
  }
  return s;
}

你可以这样称呼它:

reverseString(name);

结果是:

"wolfrevOkcatS"

在ECMAScript 6中,你可以在不使用.split(") split方法的情况下更快地反转字符串,展开操作符如下所示:

var str = [...'racecar'].reverse().join('');

在JavaScript中有许多方法可以反转字符串。我正在记下我喜欢的三种方法。

方法一:使用反向函数:

function reverse(str) {
  return str.split('').reverse().join('');
}

方法2:循环字符:

function reverse(str) {
  let reversed = '';

  for (let character of str) {
    reversed = character + reversed;
  }

  return reversed;
}

方法3:使用reduce函数:

function reverse(str) {
  return str.split('').reduce((rev, char) => char + rev, '');
}

我希望这对你有所帮助:)