JavaScript - Объект TypedArray

Здравствуйте, будущие суперзвезды кодирования! ? Сегодня мы отправимся в увлекательное путешествие в мир typedarrays в JavaScript. Не волнуйтесь, если вы новички в программировании - я буду вашим дружелюбным проводником, и мы будем идти шаг за шагом. Так что возьмите любимый напиток, устройтесь поудобнее и погружайтесь с нами!

JavaScript - TypedArray

Что такое TypedArray?

Представьте, что вы организовываете كبير聚会 (ведь кто не любит خوب聚会, правильно?). Вам нужно следить за количеством чашек, тарелок и столовых приборов. Это sorta что делает typedarray в JavaScript - он помогает нам организовать и хранить определенные типы данных эффективно.

TypedArray - это особый вид массива в JavaScript, который может содержать только числа определенного типа. Это как если бы у вас были отдельные коробки для вилок, ложек и ножей вместо того, чтобы складывать их все в один большой ящик.

// Создание typedarray из 8-битных целых чисел
const myArray = new Int8Array(5);
console.log(myArray); // Вывод: Int8Array(5) [0, 0, 0, 0, 0]

В этом примере мы создали typedarray, который может содержать пять 8-битных целых чисел. Это как если бы мы установили пять маленьких коробок, каждая из которых может содержать число от -128 до 127.

Why TypedArray?

Вы можете задаться вопросом: "Зачем заморачиваться с typedarrays, если у нас есть обычные массивы?" Отличный вопрос! TypedArrays имеют некоторые superpowers, которые делают их идеальными для определенных ситуаций:

  1. Скорость: Они быстрее для числовых операций.
  2. Эффективность памяти: Они используют фиксированное количество памяти.
  3. Совместимость: Они хорошо работают с двоичными данными и другими языками.

Это как использовать специализированный инструмент вместо швейцарского армейского ножа - иногда вам нужно идеальное соответствие!

Объекты TypedArray

JavaScript предлагает различные типы typedarrays, каждый из которых предназначен для разных типов чисел и размеров. Давайте посмотрим на них в удобной таблице:

TypedArray Описание Диапазон
Int8Array 8-битное знаковое целое число -128 до 127
Uint8Array 8-битное беззнаковое целое число 0 до 255
Int16Array 16-битное знаковое целое число -32,768 до 32,767
Uint16Array 16-битное беззнаковое целое число 0 до 65,535
Int32Array 32-битное знаковое целое число -2,147,483,648 до 2,147,483,647
Uint32Array 32-битное беззнаковое целое число 0 до 4,294,967,295
Float32Array 32-битное浮点ное число ~1.2E-38 до ~3.4E+38
Float64Array 64-битное浮点ное число ~5.0E-324 до ~1.8E+308

Вау, это quite a list! Не волнуйтесь, если это seems overwhelming - мы будем использовать примеры, чтобы все стало ясным.

Свойства TypedArray

TypedArrays имеют некоторые удобные свойства. Давайте их рассмотрим:

1. length

Это告诉我们, сколько элементов в нашем typedarray.

const myArray = new Int16Array(3);
console.log(myArray.length); // Вывод: 3

2. BYTES_PER_ELEMENT

Это свойство告诉我们, сколько байтов занимает каждый элемент в массиве.

console.log(Int8Array.BYTES_PER_ELEMENT); // Вывод: 1
console.log(Int16Array.BYTES_PER_ELEMENT); // Вывод: 2

Это как знать, сколько места занимает каждая коробка в нашей системе хранения!

Статические методы TypedArray

TypedArrays имеют некоторые встроенные методы, которые мы можем использовать без создания экземпляра. Давайте рассмотрим несколько из них:

1. TypedArray.from()

Этот метод создает новый typedarray из массивоподобного объекта.

const regularArray = [1, 2, 3, 4];
const typedArray = Int8Array.from(regularArray);
console.log(typedArray); // Вывод: Int8Array(4) [1, 2, 3, 4]

Это как convert是我们的mixed utensil drawer в аккуратно организованные коробки!

2. TypedArray.of()

Этот метод создает новый typedarray с переменным количеством аргументов.

const myArray = Int16Array.of(1, 2, 3, 4, 5);
console.log(myArray); // Вывод: Int16Array(5) [1, 2, 3, 4, 5]

Это как decir, "Вот элементы, пожалуйста, организуйте их для меня!"

Методы экземпляра TypedArray

Теперь давайте рассмотрим некоторые методы, которые мы можем использовать на наших экземплярах typedarray:

1. set()

Этот метод позволяет нам копировать значения в наш typedarray.

const myArray = new Int8Array(5);
myArray.set([1, 2, 3]);
console.log(myArray); // Вывод: Int8Array(5) [1, 2, 3, 0, 0]

Это как putting items в наши организованные коробки.

2. subarray()

Этот метод возвращает новый typedarray, который является частью исходного.

const originalArray = new Int8Array([1, 2, 3, 4, 5]);
const subArray = originalArray.subarray(1, 4);
console.log(subArray); // Вывод: Int8Array(3) [2, 3, 4]

Это как taking несколько коробок из нашей системы хранения для specific task.

Примеры

Давайте объединим все наши знания с помощью некоторых prakticheskikh примеров!

Пример 1: Создание и изменение typedarray

// Создание typedarray из 8-битных беззнаковых целых чисел
const pixelData = new Uint8Array(4);

// Установка RGB значений для пикселя (Красный: 255, Зеленый: 128, Синий: 64, Альфа: 255)
pixelData[0] = 255; // Красный
pixelData[1] = 128; // Зеленый
pixelData[2] = 64;  // Синий
pixelData[3] = 255; // Альфа (полностью непрозрачный)

console.log(pixelData); // Вывод: Uint8Array(4) [255, 128, 64, 255]

В этом примере мы используем Uint8Array для представления цветовых значений пикселя. Каждое значение находится в диапазоне от 0 до 255, что идеально для 8-битных беззнаковых целых чисел!

Пример 2: Использование typedarrays для производительности

const size = 1000000;

// Использование обычного массива
console.time('Regular Array');
const regularArray = new Array(size);
for (let i = 0; i < size; i++) {
regularArray[i] = i;
}
console.timeEnd('Regular Array');

// Использование TypedArray
console.time('TypedArray');
const typedArray = new Int32Array(size);
for (let i = 0; i < size; i++) {
typedArray[i] = i;
}
console.timeEnd('TypedArray');

Запустите этот код, и вы, вероятно, увидите, что typedarray быстрее! Это как having a well-organized storage system versus throwing everything into a big pile.

И вот мы и arrived, folks! Мы отправились в путешествие по land of TypedArrays, от понимания, что они такое, до их использования в действии. Помните, что практика makes perfect, так что не бойтесь экспериментировать с этими концепциями.

Before you know it, вы будете TypedArray wizards, оптимизируя ваш код и впечатляя своих коллег-разработчиков. Until next time, happy coding! ??‍??‍?

Credits: Image by storyset