gpt4 book ai didi

javascript - 如何从yield* 中获取当前字符串的长度

转载 作者:行者123 更新时间:2023-12-01 01:26:26 24 4
gpt4 key购买 nike

我发布了这个问题:How to generate all possible strings, with all ascii chars, to a certain length

接受的答案有一些非常漂亮的代码,但我在理解它时遇到了一些问题。
本质上,如果我询问输出的字符串的长度,它总是与它可以输出的最大长度相同。

我猜是产量*真正给我带来了一些问题。
当阅读有关 yield *时,它确实说它考虑了最终值。
因此,我更改了以下代码,以突出我的问题。

(async function() {
for(const combo of combinations(5)) {
console.log(combo.length + "\t" + combo);
await timer(1);
}
})();

输出如下:

5      !
5 "
5 #
5 $
5 %
5 &
5 '
5 (
5 )
5 *
5 +
5 ,
5 -
5 .
5 /
5 0
5 1
5 2
5 3
5 4
5 5
5 6
5 7
5 8
5 9
5 :
5 ;

即使字符串只有 1 个字符,它仍然声称它是 5 个。
那么,如何获取来自生成器的实际值的长度?

最佳答案

正在获取实际值的长度。这里发生了两件事:

首先,他们给你的代码只输出长度为 5 的字符串(或传入的任何数字),而不是你要求的长度递增的字符串。也就是说,他们给你的代码不符合你的要求。如果您想保留生成器方法,这里有一些代码将输出所有长度 1-5 的字符串,尽管我不确定它是否完全按照您想要的顺序:

function* combinations(length, previous = "") {
for(const char of chars())
yield previous + char;

if (length > 1) {
for (const char of chars())
yield* combinations(length - 1, previous + char)
}
}

其次,字符串看起来少于 5 个字符的原因是可打印字符之前有不可打印的字符,而您只能看到可打印的字符。例如,该算法将使用的第一个字符是 String.fromCharCode(0),并且该字符是不可打印的。

const unprintable = String.fromCharCode(0);
console.log(unprintable);
console.log(JSON.stringify(unprintable));

const longer = unprintable + '!'
console.log(longer);
console.log(JSON.stringify(longer));
console.log(longer.length);

关于javascript - 如何从yield* 中获取当前字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53726254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com