JS tiplangan massivlar
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:
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!
