// 1.方法1 利用charAt(),charAt()函数能根据接收到的索引,返回该索引位置对应的字符
function reverseString1(str) {
var result = '';
for(var i = str.length-1; i >= 0; i--) {
result += str.charAt(i);
}
return result;
}
console.log(reverseString1('abcdefgh'))
// 2.方法2 利用数组原生的reverse()函数
function reverseString2(str) {
const result = str.split('').reverse().join('');
return result;
}
console.log(reverseString2('abcdefg'));
// 3.方法3 通过递归
function reverseString3(strIn, position, strOut) {
if(position < 0) {
return strOut; //除非小于0,不然一直递归调用该函数处理;
}
strOut += strIn.charAt(position);
position--;
return reverseString3(strIn, position, strOut);
}
var str = 'abcdefg'
var result = '';
console.log(reverseString3(str, str.length-1, result));
//方法4. 通过call函数来改变splice()函数的执行主体
function reverseString4(str) {
var arr = Array.prototype.slice.call(str);
console.log(arr);
return arr.reverse().join('');
}
console.log(reverseString4('abcdefg'))
//方法5 利用栈的先进后出
// 栈
function Stack() {
this.data = []; //保存栈内的元素
this.top = 0; //记录栈顶的位置
}
//原型链增加出栈和入栈的方法
Stack.prototype = {
//入栈:先在栈顶添加元素,然后元素的个数加1
push: function push(element) {
this.data[this.top++] = element;
},
//出栈:返回栈顶元素,然后元素的个数减1;
pop: function pop() {
return this.data[--this.top]
},
//返回栈内的元素个数,即长度
length: function() {
return this.top;
}
};
function reverseString5(str) {
//创建一个栈实例
var s = new Stack();
//将字符串转换成数组
var arr = str.split('');
var len = arr.length;
var result = "";
// 将元素压入栈内
for(var i = 0; i < len; i++) {
s.push(arr[i]);
}
//输出栈内的元素
for(var j = 0; j < len; j++) {
result += s.pop(j);
}
return result;
}
console.log(reverseString5('abcdefgh'));
console