之前我已经问过这个问题但是我想知道我的解决方案有什么问题(我可以谷歌一个解决方案,但更有兴趣了解我做错了什么)。我想反转一个字符串而不使用一个主要的内置函数。下面是我的代码,但它返回相同的字符串,
s="hello";
var opp=s;
for (var i=0; i< s.length; i++)
{
opp[i] = s[s.length-i];
}
alert (opp);
答案 0 :(得分:2)
您的代码返回相同的字符串,因为JavaScript字符串已冻结。任何修改字符串的尝试都将被忽略。相反,您需要根据您的规则构建新字符串。
您可以通过将opp
分配给空字符串var opp = ''
,然后按相反的顺序将字符推送到opp += s[s.length-i]
来更新代码。
我也在你的代码中发现了一个错误。什么会返回第一次迭代?它将尝试访问缺少位置的char:s.length - i = s.length - 0 = s.length
。因为在JavaScript中字符串和数组是零索引的,所以字符串中的max char索引将为s.length - 1
。您正尝试访问s.length
。
答案 1 :(得分:0)
字符串为immutable:您无法分配索引。 opp[i]
是只读的。
另一种方法是使用数组:
s = "hello";
var opp = [];
var len = s.length - 1;
for (var i = 0; i <= len; i++)
opp[i] = s[len - i];
console.log(opp.join(""));
答案 2 :(得分:0)
with reduce
'some word'
.split('')
.reduce(({str, tail}, char, i, word) => {
return {tail: tail - 1, str: str + word[word.length + tail]}
}, {str: '', tail: -1})
.str