如何使用" for ... in"来反转JavaScript中的字符串环?

时间:2018-01-04 09:04:10

标签: javascript loops

我有一段JavaScript代码使用for循环来反转字符串。但是,我想知道是否可以使用for in循环,我将如何进行呢?

     function reverse(str){
         var reversedString = '';
         for (var i = str.length - 1; i >= 0; i--){
            reversedString = reversedString + str[i];
     }
     return reversedString;
   }

   alert(reverse('hello'));

3 个答案:

答案 0 :(得分:6)

来自MDN Docs

  

for ... in不应该用于遍历索引所在的数组   订单很重要。

     

数组索引只是可枚举的属性   整数名称,并且与一般对象相同   属性。无法保证......中将返回   任何特定顺序的索引。 for ... in循环语句将   返回所有可枚举属性,包括非整数属性   名称和继承的名称。

     

因为迭代的顺序是依赖于实现的,所以迭代   在数组上可能无法以一致的顺序访问元素。因此   最好使用带有数字索引的for循环(或   迭代时,Array.prototype.forEach()或for ... of循环)   访问顺序很重要的数组。

let iterable = '1234567';
String.prototype.hello = "hello";  // doesn't affect
let reversed = "";
for (let value of iterable) {
  reversed = value + reversed;
}

console.log(reversed);

Feature        Chrome   Edge    Firefox Internet Explorer   Opera   Safari
Basic support   38       12       131       No                25        8

打破for..in(参见你好悄悄进入)

let iterable = '1234567';
String.prototype.hello = "hello";
let reversed = "";
for (let index in iterable) {
  reversed = iterable[index] + reversed;
}

console.log(reversed);

答案 1 :(得分:1)

无需在

中使用
'mystring'.split('').reverse().join('')

答案 2 :(得分:1)

在这种情况下,您不应该使用for...infor...in旨在迭代对象文字,而不是字符串或数组。

[...'mystring'].reverse().join('')
Array.from('mystring').reverse().join('')

我建议您使用扩展语法或Array.from将字符串转换为数组而不是.split(''),因为split('')在多字节unicode字符的情况下无法工作。

console.log([...'\uD83D\uDE80']);
console.log('\uD83D\uDE80'.split(''));