当一个字符串被传递给一个带有返回语句的函数时,你如何在JavaScript中反转它,而不使用内置函数(.reverse(), . charat()等)?
当前回答
首先,使用array .from()将字符串转换为数组,然后使用array .prototype.reverse()将数组反向,然后使用array .prototype.join()将其转换为字符串。
const reverse = str => Array.from(str).reverse().join('');
其他回答
如果您对性能和时间复杂度更感兴趣,可以使用此方法。在这个方法中,我将字符串分为两部分,并按照长度/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))
这不是最优的,但我们可以这样想。
添加到String原型是理想的(只是以防它被添加到核心JS语言中),但你首先需要检查它是否存在,如果不存在就添加它,如下所示:
String.prototype.reverse = String.prototype.reverse || function () {
return this.split('').reverse().join('');
};
我们可以从字符串数组的两端开始迭代: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) 操作的数量仍然与输入的大小成线性比例。
参考: 阿尔戈日报
var str = "IAMA JavaScript Developer";
var a=str.split(''), b = a.length;
for (var i=0; i<b; i++) {
a.unshift(a.splice(1+i,1).shift())
}
a.shift();
alert(a.join(''));
function reverseWords(str) {
// Go for it
const invertirPalabra = palabra => palabra.split('').reverse().join('')
return str.split(' ').map(invertirPalabra).join(' ')
// con split convierto string en array de palabras, le paso ' '
// que es que me lo separe por espacios
// luego invierto cada palabra...
// y luego con join las uno separando por espacios
}