> For the complete documentation index, see [llms.txt](https://hanuce.gitbook.io/javascript-egitimi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hanuce.gitbook.io/javascript-egitimi/referans-reference-veri-tipleri/array-dizi/array-metotlar.md).

# Array Metotlar

## Eleman Ekleme ve Çıkarma

> **`.push()`** | **`.pop()`** | **`.unshift()`** | **`.shift()`**

Bir **`array`**'in **sonuna** değer **eklemek** için **`.push()`** metodu kullanılır. Örnek.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Pazartesi', 'Salı', 'Çarşamba'];
gunler.push('Perşembe'); // Eklenecek değer parantez içinde verilir.
alert(gunler);
```

{% endcode %}

**`.push()`** metodu ile birden fazla değer aynı anda eklenebilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Pazartesi', 'Salı', 'Çarşamba'];
gunler.push('Perşembe','Cuma','Cumartesi','Pazar'); // Eklenecek değerler verilir.
alert(gunler);
```

{% endcode %}

Bir **`array`**'in **sonundan** değer **silmek** için **`.pop()`** metodu kullanılır. Örnek.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Pazartesi', 'Salı', 'Çarşamba'];
gunler.pop(); // Sonuncuyu doğrudan siler. Herhangi bir değer verilmez.
alert(gunler);
```

{% endcode %}

Bir **`array`**'in **başına** değer **eklemek** için **`.unshift()`** metodu kullanılır. Örnek.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Salı', 'Çarşamba', 'Perşembe'];
gunler.unshift('Pazartesi'); // Eklenecek değer parantez içinde verilir.
alert(gunler);
```

{% endcode %}

**`.unshift()`** metodu ile birden fazla değer aynı anda eklenebilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Çarşamba', 'Perşembe','Cuma'];
gunler.unshift('Pazartesi','Salı'); // Eklenecek değerler verilir.
alert(gunler);
```

{% endcode %}

Bir **`array`**'in **başından** değer **silmek** için **`.shift()`** metodu kullanılır. Örnek.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Pazartesi', 'Salı', 'Çarşamba'];
gunler.shift(); // Birinciyi doğrudan siler. Herhangi bir değer verilmez.
alert(gunler);
```

{% endcode %}

**`Array`**'in başından yapılan işlemler ( **`.shift()`** ve **`.unshift()`** ) donanım üzerinde çok işlem gerektirdiği için genellikle kullanılmazlar. Performansı kötü etkiler. Sonundan yapılan işlemler oldukça verimlidir ve genelde bunlar ( **`.push()`** ve **`.pop()`** ) kullanılır.

## Dilimleme, Birleştirme, Sıralama

> **`.slice()`** | **`.concat()`** | **`.join()`** | **`.splice()`** | **`.sort()`** | **`.reverse()`**

**`.slice()`** ile diziyi indislere göre sıralı şekilde dilimleyebiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
let evcilHayvanlar = ['kedi','köpek','kuş','balık','kaplumbağa'];
alert( evcilHayvanlar.slice(2) ); // ilk indisten (0'dan) 2.indise kadar
alert( evcilHayvanlar.slice(1,4) ); // 1.indisten 4.indise kadar
alert( evcilHayvanlar.slice(-2) ); // son-2 indisten ilk indise kadar
alert( evcilHayvanlar.slice(-3,-1) ); // son-3 indisten son indise kadar
alert( evcilHayvanlar.slice(3,2) ); // boş çıktı: 3.indisten 2.indise gidemez.
alert( evcilHayvanlar.slice(3,3) ); // boş çıktı: 3.indisten 3.indise gidemez.
alert( evcilHayvanlar); // orijinal dizimizde hiçbir değişiklik yok.

let yeniEvciller = evcilHayvanlar.slice(1,3); // bir dilimi yeni değişken atadık.
alert(yeniEvciller);
```

{% endcode %}

**`.slice()`** metodu orijinal dizi üzerinde bir değişiklik yapmaz, bir kopyasını oluşturur. Bu sebeple güvenlidir, dilimlenen değer yeni bir değişken olarak ifade edilebilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let evcilHayvanlar = ['kedi','köpek','kuş','balık','kaplumbağa'];
let yeniEvciller = evcilHayvanlar.slice(1,3); // bir dilimi değişken atadık.
alert(yeniEvciller);
```

{% endcode %}

**`.concat()`** ile dizilerin sonuna başka bir dizinin değerlerini toplu olarak ekleyebiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
let sehirC = ['çanakkale','çankırı','çorum'];
let sehirD = ['denizli','diyarbakır','düzce'];
let sehirE = ['edirne','elazığ','erzurum','eskişehir'];
alert( sehirC.concat(sehirD) ); // dizi değerlerini ekledik.    
alert( sehirC.concat(sehirD,sehirE) ); // birkaç dizi de aynı anda kullanılabilir.
```

{% endcode %}

**`.concat()`** metodu orijinal dizi üzerinde bir değişiklik yapmaz, bir kopyasını oluşturur. Bu sebeple güvenlidir, birleştirilmiş dizi yeni bir değişken olarak ifade edilebilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let sehirC = ['çanakkale','çankırı','çorum'];
let sehirD = ['denizli','diyarbakır','düzce'];
let sehirE = ['edirne','elazığ','erzurum','eskişehir'];
let sehirCED = sehirC.concat(sehirD,sehirE);
alert(sehirC);
alert(sehirCED);
```

{% endcode %}

**`.join()`** ile dizi değerlerini **`string`** olarak birleştirebiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
let dil = ['J','A','V','A','S','C','R','I','P','T'];
alert( dil.join() ); // parametresiz kullanılabilir.
alert( dil.join('') ); //Değerlerin arasına konacak ifade parametre olarak yazılır.
alert( dil.join('-') ); // J-A-V-A-S-C-R-I-P-T
alert( typeof( dil.join('*') ) ); // string
```

{% endcode %}

**`.join()`** metodu orijinal dizi üzerinde bir değişiklik yapmaz, bir kopyasını oluşturur. Bu sebeple güvenlidir, birleştirilmiş dizi yeni bir değişken olarak ifade edilebilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let dil = ['J','A','V','A','S','C','R','I','P','T'];
let seperator = '_';
let yeniDil = dil.join(seperator);
alert(yeniDil);
```

{% endcode %}

**`.splice()`** ile dizide ekleme, çıkarma, değiştirme işlemlerini yapabilirsiniz. İsveç çakısı gibidir. Kullanımı **`.splice(indis, cikarilacakAdet, ekle1, ekle2,..., ekleN)`** .

**`.splice()`** ile ekleme örnekleri:

{% code lineNumbers="true" %}

```javascript
//ekleme örnekleri
let futbolTakimlari = ['Trabzonspor','Beşiktaş','Galatasaray','Fenerbahçe'];

//2.indise git, imleçten itibaren 0 tane değer sil, 'Malatyaspor' ekle
futbolTakimlari.splice(2,0,'Malatyaspor'); 
alert(futbolTakimlari);

//son-1. indise git, 0 değer sil, 'Sivasspor','Antalyaspor' ve 'Samsunspor' ekle
futbolTakimlari.splice(-1,0,'Sivasspor','Antalyaspor','Samsunspor'); 
alert(futbolTakimlari);
```

{% endcode %}

**`.splice()`** ile çıkarma örnekleri

{% code lineNumbers="true" %}

```javascript
//çıkarma örnekleri
let futbolTakimlari = ['Trabzonspor','Beşiktaş','Galatasaray','Fenerbahçe'];

//2.indise git, imleçten itibaren 2 tane değer sil
futbolTakimlari.splice(2,2); 
alert(futbolTakimlari);

//son-1.indise git, imleçten itibaren 1 değer sil
futbolTakimlari.splice(-1,1); 
alert(futbolTakimlari);
```

{% endcode %}

**`.splice()`** ile değiştirme örnekleri

{% code lineNumbers="true" %}

```javascript
//değiştirme örnekleri
let futbolTakimlari = ['Trabzonspor','Beşiktaş','Galatasaray','Fenerbahçe'];

//1.indise git, imleçten itibaren 1 değeri 'Malatyaspor' ile değiştir.
futbolTakimlari.splice(1,1,'Malatyaspor'); 
alert(futbolTakimlari);

//1.indise git, imleçten itibaren 2 değeri 'Ankaragücü' ve 'Adana Demir Spor' ile değiş.
futbolTakimlari.splice(1,2,'Ankaragücü','Adana Demir Spor'); 
alert(futbolTakimlari);
```

{% endcode %}

**`.splice()`** metodu **orijinal dizi üzerinde değişiklik yapar.** Bu sebeple **güvenli değildir.** Güvenli olarak işlem yapabilmek için aynı şekilde kullanılabilen **`.toSpliced()`** metodu kullanılmalıdır. **`.toSpliced()`** metodu orijinal dizi üzerinde işlem yapmaz. Örnek.

{% code lineNumbers="true" %}

```javascript
//.toSpliced() kullanımı
let futbolTakimlari = ['Trabzonspor','Beşiktaş','Galatasaray','Fenerbahçe'];

//0.indise git, imleçten itibaren 1 değeri 'Malatyaspor' ile değiştir.
alert( futbolTakimlari.toSpliced(0,1,'Malatyaspor') );
alert(futbolTakimlari); // orijinal dizi değişmedi.
```

{% endcode %}

**`.sort()`** ile dizinin elemanlarını **alfabetik** olarak sıralayabiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
let isimler = ['Alparslan','Yusuf','Göktuğ','Zeynep','Defne','Asel'];
let yaslar = [1,12,22,39,3,101];

isimler.sort();
alert(isimler); // Alparslan,Asel,Defne,Göktuğ,Yusuf,Zeynep

yaslar.sort();
alert(yaslar); // 1,101,12,22,3,39 (!! Alfabetik olarak sıralar)
```

{% endcode %}

**`.sort()`** metodu **orijinal dizi üzerinde değişiklik yapar.** Bu sebeple **güvenli değildir.** Güvenli olarak işlem yapabilmek için aynı şekilde kullanılabilen **`.toSorted()`** metodu kullanılmalıdır. **`.toSorted()`** metodu orijinal dizi üzerinde işlem yapmaz. Örnek.

{% code lineNumbers="true" %}

```javascript
let dizi = ['Alparslan','Zeynep',1,101];
alert( dizi.toSorted() ); // 1,101,Alparslan,Zeynep
alert(dizi); // orijinal dizi değişmedi.
```

{% endcode %}

**`.reverse()`** metodu ile diziyi tersine çevirebiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
let dizi = ['T','R',1,9,2,3];
dizi.reverse();
alert(dizi); // 3,2,9,1,R,T
```

{% endcode %}

**`.reverse()`** metodu **orijinal dizi üzerinde değişiklik yapar.** Bu sebeple **güvenli değildir.** Güvenli olarak işlem yapabilmek için aynı şekilde kullanılabilen **`.toReversed()`** metodu kullanılmalıdır. **`.toReversed()`** metodu orijinal dizi üzerinde işlem yapmaz. Örnek.

{% code lineNumbers="true" %}

```javascript
let dizi = ['T','R',1,9,2,3];
alert( dizi.toReversed() ); // 3,2,9,1,R,T
alert(dizi); // T,R,1,9,2,3
```

{% endcode %}

## Arama ve Pozisyon Bulma

> **`.indexOf()`** | **`.lastIndexOf()`** | **`.includes()`**

**`Array`**'lerin arama metotları **`string`**'lere oldukça benzerdir.

**`.indexOf()`** metodu ile değeri bilinen bir değerin baştan (soldan sağa) ilk indisini bulabiliriz. Değer yoksa -1 döner. Örnek.

{% code lineNumbers="true" %}

```javascript
let harfler = ['A','B','C','D'];
alert( harfler.indexOf('A') ); // 0
alert( harfler.indexOf('C') ); // 2
alert( harfler.indexOf('F') ); // -1
```

{% endcode %}

**`.lastIndexOf()`** metodu ile değeri bilinen bir değerin sondan (sağdan sola) ilk indisini bulabiliriz. Değer yoksa -1 döner. Örnek.

{% code lineNumbers="true" %}

```javascript
let harfler = ['A','B','C','D','C','B','A'];
alert( harfler.lastIndexOf('A') ); // 6
alert( harfler.lastIndexOf('C') ); // 4
alert( harfler.lastIndexOf('F') ); // -1
```

{% endcode %}

**`.includes()`** metodu ile bir değerin dizideki varlığı sorgulanır, varsa **`true`** yoksa **`false`** döner. Örnek.

{% code lineNumbers="true" %}

```javascript
let harfler = ['A','B','C','D'];
alert( harfler.includes('A') ); // true
alert( harfler.includes('AA') ); // false
```

{% endcode %}
