1. 一般来说js实现字符串逆置输出的一般思路是:
1、将字符串转为数组,一个字符为数组的一个元素;
2、将数组倒置;
3、再将数组元素拼接为字符串。
2. 一般用到的方法有:
join():该方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。
split():将一个字符串分割为子字符串数组,然后将结果作为字符串数组返回。
reverse():返回一个元素顺序被反转的 Array 对象。
charAt(): 返回指定位置的字符。
3. 下面是几种利用js都实现了字符串的逆置输出。
/*方法一:利用Array对象的reverse()方法,用于颠倒数组中元素的顺序。*/var str1 = "abcdefg"var result1 = str1.split("").reverse().join("")
console.log(result1)//gfedcba/*方法二:*/var str2 = "abcdefg"for(var i = str2.length - 1i >= 0i--){
console.log(str2.charAt(i)) //结果:逆序输出abcdefg,但是每行只输出一个字符}/*方法三:调用一个单独的函数实现*/function Reverse(str) {
var len = str.length var result = "" if(len == 0){return null
}while( --len >= 0 ){
result += str.charAt(len)
}return result//gfedcba}var str3 = "abcdefg"var result3 = Reverse(str3)
console.log(result3)
/*方法四:利用call():调用一个对象的一个方法,以另一个对象替换当前对象。*/var str4 = "abcdefg"var result4 = Array.prototype.slice.call(str4).reverse().join("")
console.log(result4)//gfedcba/*方法五:利用排序实现*/function Sort(a,b) {
return b.localeCompare(a)//反序排列
//return a.localeCompare(b)//正序排列}var str5 = "abcdefg"var result5 = str5.split("").sort(Sort).join("")
console.log(result5)//gfedcba/*方法六:利用堆栈实现字符串逆置输出:先实现一个栈,然后再利用这个栈将字符串逆置输出*/function stack() {
this.data = []//保存栈内元素
this.top = 0//记录栈顶位置}
stack.prototype = {
push: function push(element) { //入栈:先在栈顶添加元素,然后元素个数加1
this.data[this.top++] = element
},
pop: function pop() { //出栈:先返回栈顶元素,然后元素个数减1
return this.data[--this.top]
},
peek: function peek() { //查找栈顶元素
return this.data[this.top-1]
},
clear: function () { //清空栈内元素
this.top = 0
},
length: function () { //返回栈内的元素个数,即长度
return this.top
}
}function reverse(str) { //利用这个栈实现字符串逆置输出
var s = new stack() //创建一个栈的实例
var arr = str.split('')//将字符串转成数组
var len = arr.length for(var i=0i<leni++){ //将元素压入栈内
s.push(arr[i])
}for(var i=0i<leni++){ //输出栈内元素
console.log(s.pop())
}
}var str6 = "abcdefg"
reverse(str6)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
4.堆栈的补充理解
堆栈实现:
pop() :删除集合的最后一个元素,并返回元素的值。
push() :将元素添加到集合的结尾。
栈的主要方法和属性:
入栈。push方法;
出栈。pop方法;
访问栈顶元素。peek方法;
清除所有栈内元素。clear方法;
记录栈顶位置。top属性;
判断栈内是否有元素存在。length方法;
JS数组排序方法有两个: reverse() 和 sort() ,其中 reverse() 可将数组进行倒序,而 sort() 则可将数组项灵活地进行升序或降序排列。
可以看出, reverse() 会直接改变原数组,并且返回值也是倒序后的数组。
记得当年学C语言时,要学各种各样的排序算法,比如经典的冒泡排序法、二分排序法等,现在抛开这些算法不说,JS就自带原生的排序函数,用起来非常方便,它就是 sort() 。
可以看出, sort() 不传参数时会按升序方式对数组项进行排序,并且与 reverse() 一样既改变原数组,同时返回的也是排序后的数组。
我们再来看下一个例子:
这时你可能会说,不对呀,最终排序返回的不应该是 [8, 9, 16, 90] 吗?然鹅事实返回的却是 [16, 8, 9, 90] ,这到底是哪门子逻辑?
事实上, sort() 并不是按照数值进行排序,而是按字符串字母的ASCII码值进行比较排序的,所以当数组项为数字时, sort() 也会自动先将数字转换成字符串,然后再按字母比较的规则进行排序处理。
现在我们再回头看看前面两个例子。当 arr 为 [8,4,9,1] 时,数组每一项转换成字符串后进行排序的结果正好与数字排序结果相同;而当 arr 为 [8,90,9,16] 时,数组每一项转换成字符串后就得按顺序一位一位进行比较,比如升序排序时,“16”应该排在最前面,因为“16”的第一位是“1”,比“8”和“9”的ASCII码值都要小。
啰嗦了这么多,其实我们实际很少会使用这种排序方式,而更多的应该就是纯数字的排序。那么我们该如何正确地使用 sort() 来达到预期的排序效果呢?
接下来就来看看传参后的 sort() 能给我们怎样的精彩表现。
这个函数参数功能其实很简单,实际上就是告诉 sort() 排序方式到底是升序还是降序,我们还是来看具体实例吧~
这种用法的规则是,当 sort() 传入函数中的第一个参数a位于第二个参数b之前,则返回一个负数,相等则返回0,a位于b之后则返回正数。
比如,当要做升序排序时,我们需要想到前面的数肯定是要比后面的数小,所以传入的这个函数参数返回值应该要是个负数,因此函数参数返回 a - b 。
如果实在不好理解,我们可以干脆记下来, a - b 升序, b - a 降序,但是需要注意的是,如果按照这种记忆方式的话,函数括号内的两个参数 a 和 b 的书写顺序可不能颠倒哦~