# 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hanuce.gitbook.io/javascript-egitimi/referans-reference-veri-tipleri/array-dizi/array-metotlar.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
