JS tiplangan massivlar

ULASHISH

Yozilgan Arraylar

Tiplangan massivlar ikkilik ma’lumotlar (Binary Data) bilan ishlash uchun yaratilgan.

Oddiy massivlardan farqli o‘laroq, tiplangan massivlar qat’iy uzunlikdagi buferlardir.

Tiplangan massivlar 8 bitli butun sonlar yoki 32 bitli sonlar kabi qat’iy tipdagi elementlarni saqlaydi.

Misollar

5 baytlik tiplangan massiv yaratish:

const myArr = new Uint8Array(5);
O‘zingiz sinab ko‘ring »

Massivdan tiplangan massiv yaratish:

const myArr = new Uint8Array([0,1,2,3,4]);
O‘zingiz sinab ko‘ring »

Sonlar ro‘yxatidan tiplangan massiv yaratish:

const myArr = Uint8Array.of(0,1,2,3,4);
O‘zingiz sinab ko‘ring »

Massivdan tiplangan massiv yaratish:

const myArr = Uint8Array.from([0,1,2,3,4]);
O‘zingiz sinab ko‘ring »

Tiplangan massivlarning afzalliklari

Yozilgan massivlar aralash ma’lumotlar turlarining elementlarini saqlay oladigan an’anaviy JavaScript massivlaridan farqli o‘laroq, ikkilik ma’lumotlar bilan ishlashning samarali usulini ta’minlash uchun mo‘ljallangan.

Yozilgan massivlar xom xotiradir, shuning uchun JavaScript ularni ma’lumotlarni boshqa tasvirga aylantirmasdan to‘g‘ridan-to‘g‘ri istalgan funksiyaga o‘tkazishi mumkin.

Yozilgan massivlar oddiy massivlarga qaraganda ma’lumotlarni xom ikkilik ma’lumotlardan foydalanishi mumkin bo‘lgan funksiyalarga uzatish uchun jiddiyroqdir. Yozilgan massivlar quyidagilar uchun juda mos keladi:

  • WebGL va Canvas:
    Grafikani tez chizish va tasvirlarni qayta ishlash.

  • File API’lari:
    Mahalliy fayllarni tez o‘qish va yozish.

  • Media API’lari:
    Audio va video ma’lumotlarni tez qayta ishlash.

  • WebSockets:
    Efficient binary data transfer over network.


Tiplangan massivlar ikkilik ma’lumotlar bilan C tilidagi massivlar kabi samarali ishlash imkonini beradi.


Tiplangan massivlarni qo‘llab-quvvatlovchi brauzer API’lari

Fetch API misoli

fetch(url)
.then(request => request.arrayBuffer())
.then(arrayBuffer =>...);

Canvas misoli

const canvas = document.getElementById('my_canvas');
const context = canvas.getContext('2d');
const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
const uint8ClampedArray = imageData.data;

Oddiy massivlardan farqlari

  • Qat’iy uzunlik:
    Tiplangan massivlarning o‘lchamini push() yoki pop() kabi metodlar yordamida dinamik o‘zgartirib bo‘lmaydi.

  • Turni cheklash: Elementlar yozilgan massivning belgilangan ma’lumotlar turiga mos kelishi kerak.
  • Asosiy bufer: Yozilgan massivlar ikkilik ma’lumotlarni to‘g‘ridan-to‘g‘ri boshqarish imkonini beruvchi ArrayBufferga ko‘rinishdir.

Tiplangan massiv tiplari

Nomi Min Max Bytes Turi
Int8Array -128 127 1 bayt
Uint8Array 0 255 1 octet
Uint8ClampedArray 0 255 1 octet
Int16Array -32768 32767 2 qisqa
Uint16Array 0 65535 2 unsigned short
Int32Array -2147483648 2147483647 4 uzoq
Uint32Array 0 4294967295 4 unsigned long
BigInt64Array -263 263 - 1 8 bigint
BigUint64Array 0 264 - 1 8 unsigned bigint
     
Float16Array -65504 65504 2 unrestricted half
Float32Array -3.4e38 3.4e38 4 unrestricted float
Float64Array -1.8e308 1.8e308 8 unrestricted double

8 bitli butun sonlar

Name Data Type Range
Int8Array Signed integer (byte) -128/127
Uint8Array Unsigned integer (octet) 0/255
Uint8ClampedArray Unsigned integer (octet) 0/255

Misollar

10 ta ishorali 8 bitli butun sondan iborat tiplangan massiv yaratish (byte formati):

const myArr = new Int8Array(10);
O‘zingiz sinab ko‘ring »

10 ta ishorasiz 8 bitli butun sondan iborat tiplangan massiv yaratish (octet formati):

const myArr = new Uint8Array(10);
O‘zingiz sinab ko‘ring »

10 ta ishorasiz 8 bitli butun sondan iborat tiplangan massiv yaratish (clamped formati):

const myArr = new Uint8ClampedArray(10);
O‘zingiz sinab ko‘ring »

Uint8Array va Uint8ClampedArray

Uint8Array va Uint8ClampedArray o‘rtasidagi farq qiymatlarni qo‘shish usulidir.

Agar siz Uint8ClampedArray-da bitta elementni 0-255 oralig‘idan tashqaridagi qiymatga o‘rnatsangiz, u sukut bo‘yicha 0 yoki 255 bo‘ladi.

Yozilgan Array faqat qiymatning dastlabki 8 bitini oladi.


Tiplangan massivlar massiv emas.

Tiplangan massivga nisbatan isArray() false qaytaradi.

Ko‘pgina massiv metodlari (masalan, push va pop) tiplangan massivlar tomonidan qo‘llab-quvvatlanmaydi.


16 bitli butun sonlar

Name Data Type Range
Int16Array Short integer -32768/32767
Uint16Array Unsigned short integer 0/65535

Misollar

10 ta ishorali 16 bitli butun sondan iborat tiplangan massiv yaratish (short formati):

const myArr = new Int16Array(10);
O‘zingiz sinab ko‘ring »

10 ta ishorasiz 16 bitli butun sondan iborat tiplangan massiv yaratish (unsigned short formati):

const myArr = new Uint16Array(10);
O‘zingiz sinab ko‘ring »

32 bitli butun sonlar

Name Data Type Range
Int32Array Signed long integer -2147483648 / 2147483647
Uint32Array Unsigned long integer 0 / 4294967295

Misollar

10 ta ishorali 32 bitli butun sondan iborat tiplangan massiv yaratish (long formati):

const myArr = new Int32Array(10);
O‘zingiz sinab ko‘ring »

10 ta ishorasiz 32 bitli butun sondan iborat tiplangan massiv yaratish (unsigned long formati):

const myArr = new Uint32Array(10);
O‘zingiz sinab ko‘ring »


64 bitli butun sonlar

Name Data Type Range
BigInt64Array Big signed integer -263/263-1
BigUint64Array Big unsigned integer 0/264

Misollar

10 ta ishorali 64 bitli butun sondan iborat tiplangan massiv yaratish (bigint formati):

const myArr = new Bigint64Array(10);
O‘zingiz sinab ko‘ring »

10 ta ishorasiz 64 bitli butun sondan iborat tiplangan massiv yaratish (bigint formati):

const myArr = new Biguint64Array(10);
O‘zingiz sinab ko‘ring »

Suzuvchi nuqtali sonlar

Name Tavsif Range
Float16Array Half precision - 3 significant decimal digits -65504 / 65504
Float32Array Normal precision - 7 significant decimal digits -3.4e38 / 3.4e38
Float64Array Double precision- 15 significant decimal digits -1.8e308 / 1.8e308

ECMAScript standartida belgilanganidek, JavaScript-da arifmetika ikki aniqlikdagi suzuvchi nuqtali arifmetika yordamida amalga oshiriladi:

64-bit

Misollar

16 bitli (yarim aniqlikdagi) formatda 10 ta suzuvchi nuqtali sondan iborat tiplangan massiv yaratish:

const myArr = new Float16Array(10);
O‘zingiz sinab ko‘ring »

32 bitli (oddiy aniqlikdagi) formatda 10 ta suzuvchi nuqtali sondan iborat tiplangan massiv yaratish:

const myArr = new Float32Array(10);
O‘zingiz sinab ko‘ring »

64 bitli (ikkilangan aniqlikdagi) formatda 10 ta suzuvchi nuqtali sondan iborat tiplangan massiv yaratish:

const myArr = new Float64Array(10);
O‘zingiz sinab ko‘ring »


Brauzerlarda qo‘llab-quvvatlash

Typed Arrays — ES6 imkoniyati.

ES6 2017 yil iyun oyidan boshlab barcha zamonaviy brauzerlarda to‘liq qo‘llab-quvvatlanadi:

Chrome
51
Edge
15
Firefox
54
Safari
10
Opera
38
May 2016 Apr 2017 Jun 2017 Sep 2016 Jun 2016

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!