Javascript: Eski Köye Yeni Adet- 2
Merhaba, Eski köye yeni âdet yazı serisine kaldığımız yerden devam etmek istiyorum. Fırsat buldukça bu seriye yeni yazılar ekleyemeye devam edeceğim. Bir önceki bölümde olanları merak edenler için bir önceki yazının linkini ekleyelim.
Javascript: Eski Köye Yeni Adet
Dizi İşlemleri
- İki dizinin eşit olup olmadığını kontrol etmek için aşağıdaki yöntemler kullanılabilir
1 2 3 4 5 6 7 8 9 10 11 |
// 1. yöntem const karsilastir_v1 = (dizi1, dizi2) => JSON.stringify(dizi1) === JSON.stringify(dizi2); karsilastir_v1([1, 2, 3], [1, 2, 3]); // true //2.yöntem const karsilastir_v2 = (dizi1, dizi2) => dizi1.length === dizi2.length && dizi1.every((v, i) => v === dizi2[i]); karsilastir_v2([1, 2, 3], [1, '2', 3]); // false; |
2. String olarak verilen sayı dizisini, gerçek sayı dizisine çevirmek için aşağıdaki yöntemler kullanılabilir.
1 2 3 4 5 6 7 8 9 10 |
const sayilar_v1 = stringDizi => stringDizi.map(Number); sayilar_v1(['2', '3', '4']) ; const sayilar_v2 = dizi => dizi.map(x => +x); sayilar_v2(['5', '6', '7']); |
3. İç içe dizilerden oluşan bir diziyi, tek bir diziye(Array Flatting) çevirmek için aşağıdaki yöntemler kullanılabilir. Aşağıdaki kod flat metodu yüzünden Runkit’te hata verecektir. Tarayıcı üzerinden denebilirsiniz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
const yeniDizi_V1 = dizi => [].concat.apply([], dizi.map(a => Array.isArray(a) ? yeniDizi_V1(a) : a)); yeniDizi_V1(['1', ['2', '3',[4,5]]]); ; const yeniDizi_V2 = dizi => dizi.reduce((a, b) => Array.isArray(b) ? [...a, ...yeniDizi_V2(b)] : [...a, b], []); yeniDizi_V2(['x', ['y', 'z',[4,5,['3','t']]]]); ; /* Aşağıdaki kodu tarayıcı üzerinde denebilirsiniz // ES2019 ile birlikte geldi (tek seviye dizileri düzleştirir. https://caniuse.com/#feat=array-flat ) const yeniDizi_V_3 = dizi => dizi.flat(); yeniDizi_V_3(['x', ['y', 'z']]); */; |
4. Verilen iki dizi’de kesişim işlemi aşağıdaki şekilde yapılabilir.
1 2 3 4 5 6 |
const kesisim = (dizi1, dizi2) => [...new Set(dizi1)].filter(v => dizi2.includes(v)); kesisim([1, 2, 3], [4, 3, 5,2]) ; |
5. İki diziyi birleştirme işlemi aşağıdaki yöntemler ile yapılabilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 1. yöntem const birlesim_v1 = (dizi1, dizi2) => dizi1.concat(dizi2); birlesim_v1([1,2],[3,4]);; // 2. yöntem const birlesim_v2 = (dizi1, dizi2) => [...dizi1, ...dizi2]; birlesim_v2([1,2,3],[3, 4,5]);; // 3. yöntem Çoklayan kayıtlar teke indirerek birleştirme işlemi const birlesim_v3 = (dizi1, dizi2) => [...new Set(dizi1.concat(dizi2))]; birlesim_v3([1,2,3,5],[3, 4,5]);; // 4. yöntem Çoklayan kayıtlar teke indirerek birleştirme işlemi const birlesim_v4 = (dizi1, dizi2) =>[...new Set([...dizi1, ...dizi2])]; birlesim_v4([1,2,4,5],[2, 4,6]); |
Tarih İşlemleri
- İki tarih arasındaki gün sayısı aşağıdaki şekilde bulunabilir.
1 2 3 4 5 6 |
const gunsayisi = (tarih1, tarih2) => Math.ceil(Math.abs(tarih1 - tarih2) / (1000 * 60 * 60 * 24)); gunsayisi(new Date('1980-01-25'), new Date()); |
2. Verilen tarihi gün , ay , yıl vb şeklinde ayırmak için aşağıdaki yöntem kullanılır.
1 2 3 4 5 6 |
const tarihBolumleri = tarih => tarih.toISOString().split(/[^0-9]/).slice(0, -1) tarihBolumleri(new Date()); // yil, ay , gün, saat, dakika, saniye, mili saniye; |
3. Verilen tarihte ay ismini bulmak için aşağıdaki yöntem kullanılabilir
1 2 3 4 5 6 7 |
const ayAdi = tarih => ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim',' Kasım', 'Aralık'][tarih.getMonth()]; ayAdi(new Date()); |
4. Ay ve yıla göre gün sayısını bulmak için aşağıdaki yöntem kullanılabilir
1 2 3 4 5 6 |
const gunSayisi = (month, year) => new Date(year, month, 0).getDate(); gunSayisi(4,2020); |
5. Verilen Tarih dizisini sıralama için aşağıdaki yöntem kullanılabilir.
1 2 3 4 5 6 7 8 |
const kucuktenBuyuge = tarihDizisi => tarihDizisi.sort((a, b) => a.getTime() > b.getTime()); kucuktenBuyuge( [new Date('2020-05-10'),new Date('2010-05-10')]); const buyuktenKucuge= tarihDizisi => tarihDizisi.sort((a, b) => a.getTime() < b.getTime()); buyuktenKucuge([new Date('2010-05-10'),new Date('2020-05-10')]); |
Diğer Örnekler
- Tarayıcının koyu modda çalışıp çalışmadığını kontrol etmek için aşağıdaki işlem yapılabilir.(Runkit’de kod hata verecektir. ama tarayıcıda test edebilirsiniz)
1 2 3 4 5 6 |
const karanlikModMu = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; karanlikModMu; |
2. Değerin sayı olup olmadığını aşağıdaki gibi kontrol edebilirsiniz
1 2 3 4 5 6 |
const sayiMi = deger => !isNaN(parseFloat(deger)) && isFinite(deger); sayiMi("1r") ; |
3. Verilen sayılar arasında en büyük ortak böleni aşağıdaki gibi hesaplayabilirsiniz.
1 2 3 4 5 6 |
const ebob = (sayi1, sayi2) => sayi2 === 0 ? sayi1 : ebob(sayi2, sayi1 % sayi2); ebob(15,18); |
4. Zar atma oyunu
1 2 3 4 5 6 |
const zarAt = () => ~~(Math.random() * 6) + 1; zarAt(); |
5. Nesnenin boş olup olmadığını kontrol etmek için aşağıdaki yöntemi kullanabilirsiniz.
1 2 3 4 5 6 7 8 9 |
const bosMu_V1 = nesne => Object.keys(nesne).length === 0 && nesne.constructor === Object; bosMu_V1({}); ; const bosMu_V2 = nesne => JSON.stringify(nesne) === '{}'; bosMu_V2({}); |
Yeni yazılarda görüşmek üzere