当一个字符串被传递给一个带有返回语句的函数时,你如何在JavaScript中反转它,而不使用内置函数(.reverse(), . charat()等)?
当前回答
添加到String原型是理想的(只是以防它被添加到核心JS语言中),但你首先需要检查它是否存在,如果不存在就添加它,如下所示:
String.prototype.reverse = String.prototype.reverse || function () {
return this.split('').reverse().join('');
};
其他回答
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(''));
另一个变体(它在IE中工作吗?):
String.prototype.reverse = function() {
for (i=1,s=""; i<=this.length; s+=this.substr(-i++,1)) {}
return s;
}
编辑:
这是不使用内置函数的:
String.prototype.reverse = function() {
for (i=this[-1],s=""; i>=0; s+=this[i--]) {}
return s;
}
注意:this[-1]保存字符串的长度。
然而,不可能将字符串反向,因为赋值给 单个数组元素不能与String对象(protected?)一起工作。也就是说,你可以赋值,但结果字符串不会改变。
你可以尝试这样做。我相信还有重构的空间。我无法使用分裂函数。也许有人知道不分裂的方法。
代码设置,可以把它放在你的。js库
使用它的代码(有客户端代码,只是因为它在浏览器中测试过):
var sentence = "My Stack is Overflowing."
document.write(sentence.reverseLetters() + '<br />');
document.write(sentence.reverseWords() + '<br />');
代码片段:
String.prototype.aggregate = function(vals, aggregateFunction) { var temp = ''; for (var i = vals.length - 1; i >= 0; i--) { temp = aggregateFunction(vals[i], temp); } return temp; } String.prototype.reverseLetters = function() { return this.aggregate(this.split(''), function(current, word) { return word + current; }) } String.prototype.reverseWords = function() { return this.aggregate(this.split(' '), function(current, word) { return word + ' ' + current; }) } var sentence = "My Stack is Overflowing." document.write(sentence.reverseLetters() + '<br />'); document.write(sentence.reverseWords() + '<br />');
var str = 'sample string';
[].map.call(str, function(x) {
return x;
}).reverse().join('');
OR
var str = 'sample string';
console.log(str.split('').reverse().join(''));
//输出:“gnirts elpmas”
你不能将字符串反向,但你可以使用这个:
String.prototype.reverse = function() { 返回this.split (" ") .reverse () . join (" "); } var s = "ABCD"; S = S .reverse(); console.log(年代);