Встроенные объекты JavaScript — Массив массива (4) — генератор последовательности

        Генератор последовательностей создает последовательность с указанным начальным и конечным значением, а также создает массив последовательностей на основе указанной длины интервала.

        Чтобы выполнить эту функцию, вам необходимо использовать объект from() встроенного объекта Array, а также знания, связанные с массивами. Соответствующие случаи для демонстрации есть в предыдущих статьях.

Адрес 1: встроенный объект JavaScript — массив массива (2) — Блог метода_Awakening Master-CSDN

Адрес 2: встроенный объект JavaScript — массив массива (3) — Блог Custom ArrayList_Awakening Master — Блог CSDN

1. Массив классов

        Объект, подобный массиву, относится к объекту, который может получать доступ к элементам через свойства индекса и имеет свойство длины.

        Разница между объектами, подобными массиву, и массивами заключается в том, что объекты, подобные массиву, не могут напрямую вызывать методы массива, и их необходимо вызывать косвенно через Function.call и Function.apply.

        Объекты, подобные массивам, начинаются с нуля, используют возрастающие целые числа в качестве ключей и определяют объект, длина которого представляет количество элементов.Он называется объектом, подобным массиву.

        Многие люди могут быть незнакомы с массивами классов и методом Array.from(). Надеюсь, что благодаря этому случаю каждый поймет их функции и удобства.

Пример:

const objArr = { 
    0: "How", 
    1: "are", 
    2: "you", 
    length: 3 
}

2. метод from()

        Метод Array.from() создает новый массив из объекта, подобного массиву или итерируемого, и возвращает его. Подробности метода from() можно найти в разделе «Адрес 1». Здесь мы знаем, что он может преобразовать массив класса в новый экземпляр массива.Пример следующий:

const objArr = { 0: "How", 1: "are", 2: "you", length: 3 }

console.log(Array.from(objArr));

Вывод следующий:

[ 'Как вы' ]

3. Реализация генератора последовательностей

3.1 Генерация массива указанной длины

        Создав массив класса и указав его длину, преобразуйте его в пустой массив указанной длины с помощью метода Array.from(), а затем реализуйте функцию приращения элемента через цикл.

Пример:

/**
 * 序列生成器
 */
const generatorSequence = (start, end, step) => {
    // 生成一个指定长度的空数组
    let arr = Array.from({ length: (end - start) / step + 1 });
    console.log(arr);
}

// 生成0~9元素的数组,每递增为1
generatorSequence(0, 9, 1);

Результат вывода:

[
  неопределенный, неопределенный,
  неопределенный,
  неопределенный, неопределенный, неопределенный,
  неопределенный, неопределенный,
  неопределенный, неопределенный
]

3.2 Реализация дополнительных функций

        Если указан второй параметр метода Array.from(), функция обратного вызова будет выполнена для каждого элемента нового массива. Таким образом, вы можете использовать эту функцию для увеличения всех неопределенных циклов в пустом массиве до значений последовательности.

Пример:

/**
 * 序列生成器
 */
const generatorSequence = (start, end, step) => {
    // 生成一个指定长度的空数组
    // (_, i) 因为空数组,所以第一个参数 “_” 返回结果为undefined,第二个参数“i”为索引值
    let arr = Array.from({ length: (end - start) / step + 1 }, (_, i) => start + (i * step));
    console.log(arr);
}

// 生成0~9元素的数组,每递增为1
generatorSequence(0, 9, 1);

Результат вывода:

[
  0, 1, 2, 3, 4,
  5, 6, 7, 8, 9
]

        На данный момент генератор последовательности реализован.Эта функция не сложная.Давайте оптимизируем ее.Код выглядит следующим образом:

/**
 * 序列生成器
 */
const generatorSequence = (start, end, step) =>  
                        Array.from(
                            { length: (end - start) / step + 1 }, 
                            (_, i) => start + (i * step)
                        );

// 生成0~9元素的数组,每递增为1
const arr = generatorSequence(0, 5, 1);
// 输出结果
console.log(arr);

Результат вывода:

[ 0, 1, 2, 3, 4, 5 ]

3.3 Генерация четных чисел

 Пример:

/**
 * 序列生成器
 */
const generatorSequence = (start, end, step) =>  
                        Array.from(
                            { length: (end - start) / step + 1 }, 
                            (_, i) => start + (i * step)
                        );

// 生成偶数
const arr = generatorSequence(0, 10, 2);
// 输出结果
console.log(arr);

Результат вывода:

[ 0, 2, 4, 6, 8, 10 ]

3.4 Год создания

Пример:

/**
 * 序列生成器
 */
const generatorSequence = (start, end, step) =>  
                        Array.from(
                            { length: (end - start) / step + 1 }, 
                            (_, i) => start + (i * step)
                        );

// 生成0~9元素的数组,每递增为1
const arr = generatorSequence(2010, 2023, 1);
// 输出结果
console.log(arr);

Результат вывода:

[
  2010, 2011, 2012
  , 2013, 2014,
  2015, 2016, 2017, 2018,
  2019, 2020, 2021,
  2022, 2023
]

3.5 Преобразование года в объект

Пример:

/**
 * 序列生成器
 */
const generatorSequence = (start, end, step) =>  
                        Array.from(
                            { length: (end - start) / step + 1 }, 
                            (_, i) => start + (i * step)
                        );

// 生成0~9元素的数组,每递增为1
const arr = generatorSequence(2010, 2023, 1).map(item => {
    return {
        label: item,
        value: item
    }
});
// 输出结果
console.log(arr);

Результат вывода:

[
  { метка: 2010, значение: 2010 },
  { метка: 2011, значение: 2011 },
  { метка: 2012, значение: 2012 },
  { метка: 2013, значение: 2013 },
  { метка: 2014, значение: 2014 } ,
  { метка: 2015, значение: 2015 },
  { метка: 2016, значение: 2016 },
  { метка: 2017, значение: 2017 },
  { метка: 2018, значение: 2018 },
  { метка: 2019, значение: 2019 } ,
  { метка: 2020, значение: 2020 },
  { метка: 2021, значение: 2021 },
  { метка: 2022, значение: 2022 },
  { метка: 2023, значение: 2023 }
]

3.6 Генерация букв A~Z

        Здесь будет использоваться метод charCodeAt(), который представляет собой строковый метод, используемый для получения значения Unicode определенного символа. При генерации кодов Юникода между A~Z вам необходимо использовать метод fromCharCode(), который также является строковым методом и используется для преобразования кодов Юникода в символы.

Пример:

/**
 * 序列生成器
 */
const generatorSequence = (start, end, step) =>  
                        Array.from(
                            { length: (end - start) / step + 1 }, 
                            (_, i) => start + (i * step)
                        );
// 生成A~Z之间字符
const arr = generatorSequence('A'.charCodeAt(0), 'Z'.charCodeAt(0), 1);
// 输出结果
console.log(arr);

Результат вывода:

[
  65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85
  , 86
  , 87, 88,
  89 , 90
]

        Выше приведены все коды Unicode, поэтому после создания массива последовательностей вы можете использовать метод Array.map() для преобразования всех значений в символы.Код выглядит следующим образом:

/**
 * 序列生成器
 */
const generatorSequence = (start, end, step) =>  
                        Array.from(
                            { length: (end - start) / step + 1 }, 
                            (_, i) => start + (i * step)
                        );
// 生成A~Z之间字符
const arr = generatorSequence('A'.charCodeAt(0), 'Z'.charCodeAt(0), 1)
            .map(item => String.fromCharCode(item));
// 输出结果
console.log(arr);

Результат вывода:

[
  'A', 'B', 'C', 'D', 'E', 'F', 'G', '
  H', 'I', 'J', 'K', 'L',
  ' M', 'N', 'O', 'P', 'Q', 'R', 'S', '
  T', 'U', 'V', 'W', 'X',
  'Y' , 'З'
]

3.7 Генерация китайских иероглифов

        Поскольку можно генерировать буквы, можно также генерировать китайские иероглифы. Однако Unicode не очень хорошо поддерживает китайские символы.В упрощенном и традиционном китайском языке всего от 60 000 до 70 000 китайских символов, а UCS-2 может представлять до 65 536, поэтому Unicode может исключать только некоторые редко используемые китайские символы.

        Пример:

/**
 * 序列生成器
 */
const generatorSequence = (start, end, step) =>  
                        Array.from(
                            { length: (end - start) / step + 1 }, 
                            (_, i) => start + (i * step)
                        );
// 生成汉字
const arr = generatorSequence('一'.charCodeAt(0), '二'.charCodeAt(0), 1)
            .map(item => String.fromCharCode(item));
// 输出结果
console.log(arr);

Результат вывода:

[
  '一', '丁', '丂', '七', '丄', '丅', '丆', '万', '张', '三', '上', '下',
  '丏', '不', '和', '丏', 'нищий', 'уродливый', '丒', 'Чжуань', 'Ци', 'Пи', '世', '丗', 'Цю
  ' , 'бин', 'йе', 'конг', 'дон', 'си', 'чэн', 'умри', '丠', '両', 'умри', '丣', 'два',
  ' Ян', 'бин', 'пел', '丨', '丩', 'гэ', '丫', '丬', '中', '丮', '丯', 'Фэн', '丱
  ' , «Чуань», «丳», «Лин», «丵», «丶», «丷», «Вань», «Дань», «Вэй», «Чжу»,
  '丼', '丽', 'Джу', '丿', '乀', '乁', '乂', 'Най', '乄', 'Джиу', '乆', '乇', '灹
  '', 'И', '乊', 'Чжи', 'У', 'Чжа', 'Ху', 'У', 'Лэ', '乑', 'Пин', 'Понг', 'Цяо'
  , '乕', 'гуай', '成', '成', 'йи', '乚', '乛', '乜', '九', 'просить', 'йе', 'си', ' xiang
  ' ', '乢', '乣',
  ... еще 41 позиция
]«У», «Чжа», «Ху», «У», «Ле», «乑», «Пин», «Понг », «Цяо», «乕», «Гуай», «成», «成» ', 'йи', '乚', '乛', '乜', '九', 'просить', 'йе', 'си', 'сян', '乢', '乣', ... 41 больше товаров ]«У», «Чжа», «Ху», «У», «Ле», «乑», «Пин», «Понг », «Цяо», «乕», «Гуай», «成», «成» ', 'йи', '乚', '乛', '乜', '九', 'просить', 'йе', 'си', 'сян', '乢', '乣', ... 41 больше товаров ]

        Соответствующие функции генератора последовательностей пока будут представлены здесь, надеюсь, это будет полезно всем.

рекомендация

отblog.csdn.net/jiciqiang/article/details/133500544