如何在JavaScript中生成字符串的所有子字符串?
有时候,您可能需要生成字符串的所有子字符串。这在各种情况下都很有用,比如字符串匹配或字符串压缩。幸运的是,使用JavaScript的生成器函数,这是一个相当简单的任务。
左子字符串生成器
使用for...in
循环,我们可以遍历字符串,并yield
每个子字符串,从开头开始。我们可以使用String.prototype.slice()
来获取子字符串。为了提前终止,我们可以使用String.prototype.length
来检查字符串是否为空。
const leftSubstrGenerator = function* (str) {
if (!str.length) return;
for (let i in str) yield str.slice(0, i + 1);
};
[...leftSubstrGenerator('hello')];
// [ 'h', 'he', 'hel', 'hell', 'hello' ]
右子字符串生成器
同样的技术可以在字符串末尾开始时使用for...in
循环。与之前一样,只是稍作修改,我们可以使用String.prototype.slice()
来获取子字符串。同样,如果字符串为空,我们使用String.prototype.length
提前终止。
const rightSubstrGenerator = function* (str) {
if (!str.length) return;
for (let i in str) yield str.slice(-i - 1);
};
[...rightSubstrGenerator('hello')];
// [ 'o', 'lo', 'llo', 'ello', 'hello' ]