Вы получаете длину фактического значения.Здесь происходит две вещи:
Во-первых, код, который они вам дали, выводит только строки длиной 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);