当一个字符串被传递给一个带有返回语句的函数时,你如何在JavaScript中反转它,而不使用内置函数(.reverse(), . charat()等)?
当前回答
其中一种方法也可以是在使用分割法后再使用还原法进行逆向。
函数reverse(str) { 返回str.split(”)。reduce((rev, currentChar) => currentChar + rev, "); } console.log(反向('苹果')); console.log(反向('你好')); console.log(反向(“问候!”);
其他回答
如果您对性能和时间复杂度更感兴趣,可以使用此方法。在这个方法中,我将字符串分为两部分,并按照长度/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))
这不是最优的,但我们可以这样想。
整个“将字符串反向”是一个过时的C程序员面试问题,被他们面试的人(可能是为了报复?)会问。不幸的是,它的“到位”部分不再起作用,因为几乎所有托管语言(JS, c#等)中的字符串都使用不可变字符串,因此无法在不分配任何新内存的情况下移动字符串。
虽然上面的解决方案确实反转了字符串,但它们在不分配更多内存的情况下不会这样做,因此不满足条件。您需要直接访问分配的字符串,并能够操作其原始内存位置,以便将其反向。
就我个人而言,我真的很讨厌这类面试问题,但遗憾的是,我相信在未来几年里我们还会继续看到它们。
String.prototype.reverse_string=function() {return this.split("").reverse().join("");}
or
String.prototype.reverse_string = function() {
var s = "";
var i = this.length;
while (i>0) {
s += this.substring(i-1,i);
i--;
}
return s;
}
下面是一个基本的ES6不可变的例子,没有使用Array.prototype.reverse:
//:: reverse = String ->字符串 const reverse = s => []. reduceright .使用实例调用(s, (a, b) => a + b) Console.log (reverse('foo')) // => 'oof' Console.log (reverse('bar')) // => 'rab' Console.log (reverse('foo-bar')) // => ' rabb -oof'
保持干燥和简单,傻!!
function reverse(s){
let str = s;
var reverse = '';
for (var i=str.length;i>0;i--){
var newstr = str.substring(0,i)
reverse += newstr.substr(-1,1)
}
return reverse;
}
推荐文章
- Javascript数组搜索和删除字符串?
- 如何复制对象属性在另一个对象?
- 如何绕过Access-Control-Allow-Origin?
- 我如何使用Node.js Crypto创建HMAC-SHA1哈希?
- JavaScript获取滚动窗口的X/Y位置
- “文本”和新字符串(“文本”)之间的区别是什么?
- JavaScript中不带else的三元运算符
- 如何检查对象是否在JavaScript中有任何属性?
- iFrame src变化事件检测?
- Java中字符串的不可变性
- 为什么Oracle 9i将空字符串视为NULL?
- 我如何在网页上动画文本的绘图?
- 对“URL”执行“createObjectURL”失败:
- 如何在package.json中使用“main”参数?
- 为什么在Java 8中String.chars()是整数流?