如何使用“for ... in”循环在JavaScript中反转字符串?

问题描述 投票:-5回答:3

我有一段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'));
javascript loops
3个回答
6
投票

来自MDN Docs

for ... in不应该用于迭代索引顺序很重要的数组。

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

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

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
投票

无需用于

'mystring'.split('').reverse().join('')

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(''));
© www.soinside.com 2019 - 2024. All rights reserved.