如何在JavaScript字符串中遍历码点的索引及其对应值?
在JavaScript中遍历字符串码点的索引与对应值
JavaScript 提供了 String.prototype[Symbol.iterator] 来遍历字符串的码点,但没有内置方法能同时获取每个码点的起始索引。我们可以自己实现一个函数来满足需求,比如题目中提到的 codepointIndices:
实现方式(生成器版本)
function* codepointIndices(str) { let index = 0; for (const char of str) { yield [index, char]; index += char.length; } }
测试示例
调用 [...codepointIndices("H🏁ello")] 会得到预期结果:
[[0, "H"], [1, "🏁"], [3, "e"], [4, "l"], [5, "l"], [6, "o"]]
实现逻辑说明
- 使用生成器函数(
function*)可以逐个返回码点的索引与对应值,配合扩展运算符...就能轻松转为数组 - 初始化
index为0,用来追踪当前码点在字符串中的起始位置 for...of循环会自动通过字符串的默认迭代器处理码点,像"🏁"这种占用2个UTF-16代码单元的字符会被当作一个整体遍历- 每次迭代后,根据当前字符的
length(即该码点对应的UTF-16代码单元数量)更新索引,确保下一次迭代的索引位置正确
非生成器版本(直接返回数组)
如果不需要生成器的惰性遍历特性,也可以直接返回数组:
function codepointIndices(str) { const result = []; let index = 0; for (const char of str) { result.push([index, char]); index += char.length; } return result; }
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

