打字稿循环遍历具有索引和值的字符串
Posted
技术标签:
【中文标题】打字稿循环遍历具有索引和值的字符串【英文标题】:Typescript loop through string with index and value 【发布时间】:2020-03-08 00:39:21 【问题描述】:我想遍历一个字符串,并且我想同时拥有该索引处的索引和字符。我知道我可以为此使用一个简单的 for 循环,但我认为 javascript/Typescript 的一些新功能可能更优雅,所以我尝试了这个:
for (const [i, character] of Object.entries('Hello ***'))
console.log(i);
console.log(typeof(i));
console.log(character);
这很有效,但是即使i
计数,它也是一个字符串。所以例如这个
不起作用:
'other string'.charAt(i)
我是 Typescript 的新手,所以我的问题是:
为什么 i 是字符串而不是数字? 有没有更简单/更优雅的方法来做到这一点?【问题讨论】:
i
是一个数字。
i 输出 '1' '2' 以此类推,typeof(i) 输出 'string'
是的,我的错,没有意识到这一点。
【参考方案1】:
Unicode 安全的方法是使用扩展语法拆分为字符:
const chars = [...text];
然后你使用旧的 Array.prototype.forEach
进行迭代
chars.forEach((c, i) => console.log(c, i));
【讨论】:
看起来很优雅,但是我收到const chars = [...text];
的此错误:Type 'string' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators.ts(2569)
"Type 'string' 不是数组类型或字符串类型" --- 这看起来很尴尬:你的 text
到底是什么? @Vladtn
将目标从 es5 更改为 es2015 或 es6 可解决此问题,请参阅 ***.com/a/59662571/331719【参考方案2】:
为什么 i 是字符串而不是数字?
因为Object.entries()
返回一个键值对并且旨在用于对象,其中键当然是字符串。
有没有更简单/更优雅的方法来做到这一点?
只需一个带有 charAt(i)
的简单 for 循环就可以解决问题:
const text = 'Hello ***';
for (let i = 0; i < text.length; i++)
const character = text.charAt(i);
console.log(i, character);
【讨论】:
text.charAt
可能会破坏 Unicode 字符。试试const text = '????';
@bauke 无论如何,我会用普通的 Javascript 做些什么,谢谢! :)
@Fels 虽然它坏了以上是关于打字稿循环遍历具有索引和值的字符串的主要内容,如果未能解决你的问题,请参考以下文章