# Array - Dizi

Bir **`array`** nesnesi tanımlamak için köşeli parantezler ( **`[]`** ) kullanılır ve her bir değerin (value) arasına virgül ( **`,`** ) konur. Örnek.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi','Pazar'];
alert ( typeof(gunler) ); //object çıktısı verir ve dizi nesnesidir.
alert(gunler);
```

{% endcode %}

**`Array`**'lerin içerisindeki değerler farklı veri tiplerinde olabilir. Doğrudan bir değer yerine bir değişkeni de tutabilirler. Örnek.

{% code lineNumbers="true" %}

```javascript
let str = 'Karakter Dizisi';
let veriTipleri = [str, 2023, true, ['Başka', 1, 'array']];
alert(veriTipleri);
```

{% endcode %}

**`Array`**'in uzunluğu dizi nesnesinin **`.length`** anahtarı ile dizi uzunluğu ile elde edilir.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi','Pazar'];
alert ( gunler.length ); // 7 çıktısı verir.
```

{% endcode %}

**`Array`**'deki değerler **tamsayı artan sıralıdır**. **İlk sıra 0. indisten başlar**. **`Array`**'lerin değerlerine sırayla şu şekilde erişilir.

{% code lineNumbers="true" %}

```javascript
let gunler = [
  'Pazartesi', //0.indis
  'Salı', //1.indis
  'Çarşamba', //2.indis
  'Perşembe', //3.indis
  'Cuma', //4.indis
  'Cumartesi', //5.indis
  'Pazar' //6.indis
];
alert( gunler[0] ); // indisi değiştirerek kontrol ediniz.
```

{% endcode %}

**`.at()`** metodu ile de değerlere erişilebilir.

{% code lineNumbers="true" %}

```javascript
let ulkeler = [
  ['Türkiye', 'Ankara',1923], // 0.indis
  ['KKTC', 'Lefkoşa',1983 ], // 1.indis
  ['Azerbaycan', 'Bakü',1991] // 2.indis
];
alert( ulkeler.at(0) ); // indisi değiştirerek kontrol ediniz.
```

{% endcode %}

**`Array`**'de indisi ile eriştiğimiz bir değeri değiştirebiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
let dizi = ['Pazartesi', 'Salı', 'Çarşamba'];
dizi[0] = 'Ocak'; //0.indisteki elemanı 'Ocak' ile değiştirdik.
dizi[1] = 'Şubat'; //1.indisteki elemanı 'Şubat' ile değiştirdik.
dizi[2] = 'Mart'; //2.indisteki elemanı 'Mart' ile değiştirdik.
alert(dizi);
```

{% endcode %}

**`Array`** nesnesinin boyutu dinamiktir bu sayede istediğimiz indise değer ekleyebiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
let dizi = ['Pazartesi', 'Salı', 'Çarşamba'];
dizi[4] = 'Cuma'; //4.indise 'Cuma' değerini ekledik.
dizi[5] = 'Cumartesi'; //5.indise 'Cumartesi' değerini ekledik.
alert(dizi);
```

{% endcode %}

Yukarıdaki örnekte 3.indisi atladık. Peki 3.indiste ne oluştu?

{% code lineNumbers="true" %}

```javascript
let dizi = ['Pazartesi', 'Salı', 'Çarşamba'];
dizi[4] = 'Cuma'; //4.indise 'Cuma' değerini ekledik.
dizi[5] = 'Cumartesi'; //5.indise 'Cumartesi' değerini ekledik.
alert( dizi[3] ); // undefined çıktısı verir.
alert(dizi); //Pazartesi,Salı,Çarşamba,,Cuma,Cumartesi
//3.indis mevcuttur, yeri ayrılmıştır.
```

{% endcode %}

Bu yöntemle değer eklemek için ekleyeceğimiz indisi bilmek gerekir. Aksi takdirde var olan bir değeri değiştirip üzerine yazabilir ve veriyi kaybedebiliriz. Bu sebeple zahmetlidir.

Değerlere sırayla erişmeyi **`string`** tipinde de kullanmıştık. Fakat **`string`** tipinde indis ile eriştiğiniz değeri değiştiremez veya silemezsiniz. (İlkel tiplerin hafıza birimlerinin boyutu belirlidir.)

&#x20;Negatif bir indis verirseniz herhangi bir hata vermez fakat diziye de eklenmez.

{% code lineNumbers="true" %}

```javascript
let dizi = ['Pazartesi', 'Salı', 'Çarşamba'];
dizi[-1] = 'Perşertesi'; //-1.indes yok, ekleyemez, hata vermez.
alert(dizi);
```

{% endcode %}

**`Array`**'lerden değer silmenin yöntemi **`delete`** komutu değildir. Bu yöntemle değer **silinemez** sadece değeri **`undefined`** olarak atanır. Örnek.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Pazartesi', 'Salı', 'Çarşamba'];
delete gunler[1];
alert(gunler); // 'Pazartesi,,Çarşamba' çift virgülü farkediniz.
```

{% endcode %}

## Dizi Kontrolü

> **`Array.isArray()`**

Tüm **`object`** türlerinin tipinin **`object`** olduğunu ifade etmiştik. **`Object`** tipinde farklı türler bir arada olduğu için **`object`** bir değerin **`array`** dizisi olduğunu kontrol etmek için **`Array.isArray()`** fonksiyonu kullanılır. Örnek.

{% code lineNumbers="true" %}

```javascript
let harfler = ['A','B','C','D'];
let str = 'ABCD';
alert( Array.isArray(harfler) ); // true
alert( Array.isArray(str) ); // false
```

{% endcode %}

## Dizi Türüne Dönüştürme

> **`Array.from()`**  | **`Array()`**

**`String`** bir değer veya değişken **`array`** türüne **`Array.from()`** fonksiyonu ile dönüştürülebilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let dizi = Array.from('JAVASCRIPT');
alert(dizi); // J,A,V,A,S,C,R,I,P,T
alert( Array.isArray(dizi) );
```

{% endcode %}

Değerin tipinin **`string`** olması bir gerekliliktir. Örnek.

{% code lineNumbers="true" %}

```javascript
let sayi = 123, // nummber tipi array'a dönüşemez.
    dizi = Array.from(sayi);
alert(dizi); // boş çıktı alınır, elemanları yoktur.
alert( Array.isArray(dizi) ); // true verir fakat elemanları yoktur.
```

{% endcode %}

Bununla birlikte bir **`string`**'i dilimlemeden tek bir eleman olarak **`array`** yapmak isterseniz **`Array()`** fonksiyonunu kullanabilirsiniz. Örnek.

{% code lineNumbers="true" %}

```javascript
let dizi = Array('JAVASCRIPT');
alert(dizi); // Tek eleman 'JAVASACRIPT'
alert( Array.isArray(dizi) );
```

{% endcode %}
