Arrays in Javascript

Kategori: Javascript , 05 Kasım 2019 , JanFranco


Diziler (arrays) indisleri (indexes) kullanarak map yapısı ile verileri tutan yapılardır. İndisler 0'dan başlar ve birer artarak devam eder. Köşeleli parantrezler ([ ]) ile dizi tanımlayabiliriz. Köşeli parantezler ile index bilgisi vererek, o indexe karşılık gelen değeri alabiliriz. Dizinin elemanlarını sonradan değiştirebiliriz:


var arr = ['a', 'b', 'c']
arr[0]
>>
'a'

arr[0] = 'x';
arr
>>
['x', 'b', 'c']
length özelliği ile dizinin uzunluğunu alabiliriz:


var arr = ['a', 'b', 'c'];
arr.length
>>
3
length özelliğini değiştirerek eleman silebiliriz. length özelliğini kullanarak dizinin sonuna eleman ekleyebiliriz:


arr.length = 2;
arr
>>
['a', 'b']

arr[arr.length] = 'd';
arr
>>
['a', 'b', 'd']
push() methodu ile de dizinin sonuna eleman ekleyebiliriz:


arr.push('e');
arr
>>
['a', 'b', 'd', 'e']
Dizileri Array consturctor ile tanımlayabiliriz:


var arr = new Array(2);
arr.length
>>
2

arr
>>
[, ,]

var arr1 = new Array('a', 'b', 'c');
Çok boyutlu dizi tanımlamak için iç içe for döngüsünü kullanabiliriz:


var rows = [];
for (var rowCount=0; rowCount<3; rowCount++) {
    rows[rowCount] = [];
    for (var colCount=0; colCount<3; colCount++) {
	row[rowCount][colCount] = '.';
    }
}

rows[0][2] = 'X';

rows.forEach(function (row) {
    console.log(row.join(' '));
});

>>

. . X
. . .
. . .
Dizi küçük ise elle de tanımlayabiliriz:


var rows = [ ['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']];
Diziyi komple silmek için length özelliğini 0 yapabiliriz. Diziyi bu şekilde de küçültebiliriz. Örneğin 10 elemanlı bir dizimi var. length özelliğini olarak değiştirirsek, 4. indexten sonraki elemanlar silinir.


var arr = ['a', 'b', 'c'];
arr.length = 0;
arr
>>
[]
Dizide bazı indexleri boş bırakabiliriz. Bu boşluklara hole (delik) diyeceğiz. Ancak boş veri ile undefined farklı kavramlardır:


var sparse = [ , , 'c'];
var dense = [undefined, undefined, 'c'];

sparse.length
>>
3

dense.length
>>
3

0 in sparse
>>
false

0 in dense
>>
true

for(var i=0; i<sparse.length; i++) console.log(sparse[i]);
>>
undefined
undefined
c

for(var i=0; i<dense.length; i++) console.log(dense[i]);
>>
undefined
undefined
c

sparse.forEach(function (x) { console.log(x) });
>>
c

dense.forEach(function (x) { console.log(x) });
>>
undefined
undefined
c
Farkları bu şekilde görebiliriz. Dizi uzunları aynıdır. Indexleri kontrol ettiğimizde undefined değerinde değer var olarak gözükürken, hole'lerde değer yok gözüküyor. for döngüsü ile elemanları gezdiğimizde, iki dizide de undefined değeri alıyoruz. forEach döngüsünde durum biraz değişiyor ve hole'lar basılmıyor. Hole'ları diziden filter() methodu ile temizleyebiliriz:


['a', , 'b'].filter(function (x) { return true})
>>
['a', 'b']
Hole'leri undefined değere çevirebiliriz:


function convertHolesToUndefineds(arr) {
    var result = [];
    for (var i=0; i<arr.length; i++) {
	result[i] = arr[i];
    }
    return result;
}

convertHolesToUndefineds(['a', , 'b'])
>>
['a', 'undefined', 'b']
shift(), unshift(), pop() ve push() methodları ile diziye eleman ekleyelip silelim. shift() methodu dizinin ilk elemanını yani 0. indexteki elemanı kaldırır.


var arr = ['a', 'b'];
arr.shift();
>>
'a'

arr
>>
[ 'b' ]
unshift() methodu ile dizinin başına eleman ekleyebiliriz:


var arr = ['c', 'd'];
arr.unshift('a', 'b');
>>
4

arr
>>
['a', 'b', 'c', 'd']
pop() methodu ile dizinin son elemanını silebiliriz:


var arr = ['a', 'b'];
arr.pop()
>>
'b'

arr
>>
['a']
push() methodu ile dizinin sonuna eleman ekleyebiliriz:


var arr = ['a', 'b'];
arr.push('c', 'd')
>>
4

arr
>>
['a', 'b', 'c', 'd']
splice() methodu ile başlangıç değeri belirterek eleman silebilir, sildiğimiz kısıma eleman ekleyebiliriz:


var arr = ['a', 'b', 'c', 'd'];
arr.splice(1, 2, 'X');
arr
>>
['a', 'X', 'd']
sort() ve reverse() methodları ile diziyi sıralayabilir, diziyi ter çevirebiliriz:


var arr = ['a', 'b', 'c'];
arr.reverse()
arr
>>
['c', 'b', 'a']

var arr = ['banana', 'apple', 'pear', 'orange'];
arr.sort()
>>
[ 'apple', 'banana', 'orange', 'pear' ]
sort() methodu elemanları string'e çevirerek, ilk harften başlayarak sıralar. Bu nednele aşağıdaki durumda yanlış bir sıralama yapmış oluruz:


[-1, -20, 7, 50].sort()
>>
[-1, -20, 50, 7]
Bu durumu çözebilmek için sort() methoduna özel bir durum fonksiyonu yazıp gönderebiliriz:


function compareCanonically(a, b) {
    if (a < b) {
	return -1;
    } else if (a > b) {
	return 1;
    } else {
	return 0;
    }
}

[-1, -20, 7, 50].sort(compareCanonically)
>>
[ -20, -1, 7, 50 ]
concat() methodu ile dizileri birleştirebilir, slice() methodu ile dizilerden kesitler alabilir, join() methodu ile elemanlar arasına karakter göndererek stringe çevirebiliriz:


var arr = [ 'a', 'b' ];
arr.concat('c', ['d', 'e'])
>>
[ 'a', 'b', 'c', 'd', 'e' ]

[ 'a', 'b', 'c', 'd' ].slice(1, 3)
>>
[ 'b', 'c' ]

[ 'a', 'b', 'c', 'd' ].slice(1)
>>
[ 'b', 'c', 'd' ]
slice() methoduna başlangıç ve bitiş değerleri verilerek kesit alınabilir. Sadece başlangıç değeri verilirse, bitiş değeri olarak dizinin uzunluğunu alır. join() methodunu da görelim:


[3, 4, 5].join('-')
>>
'3-4-5'
[3, 4, 5].join()
>>
'3,4,5'
[3, 4, 5].join('')
>>
'345'
indexOf() methodu ile dizide elaman arayabiliriz. Parametre olarak aranan değerin yanında başlangıç değerini de verebiliriz. Değer bulunamazsa -1, bulunursa bulunduğu index return edilir:


[ 3, 1, 17, 1, 4 ].indexOf(1)
>>
1
[ 3, 1, 17, 1, 4 ].indexOf(1, 2)
>>
3


Sonraki Yazı: Regular Expressions
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın