AJAX & Hazır Kütüphaneler orhan
Sayılabilir İfadelerin Yönetimi (Enumerable): Sayılabilir ifadeler demek ne derece doğru bilemiyorum ama geliştiriciler öyle demiş ne diyelim. Bu metotların içeriğine gelince; bir dizi veya "RangeObject" olarak tabir ettiğimiz gruplanmış anlamlı ifadeler kümesinin yönetimi ve düzenlenmesi için kullanılan yardımcılardır.
Aslında işlev itibari ile dizi değişken metotlarına benzerlik göstermekle beraber bazı ortak metotlara da sahipler. (each, size gibi) Metotların tam olarak ne işe yaradıkları ve açıklayıcı örnekler için resmi Prototype API dokümantasyonuna göz atabilirsiniz. Burada kısaca metotların işlevlerinden bahsedeceğiz.
.all
Bir küme içerisindeki tüm değerlerin "true" değerine eşit olup olmadığını kontrol eder. Eğer koşulu sağlamayan bir değer varsa ya da değerlerden biri "false" ise sonuç olarak "false" döndürür. Boş kümeler "true" verir.
[0, 1, 2].all()
// false (sadece bir döngü sonunda "false" verir)
.any
Küme içerisindeki en azından bir değerin "true" koşulunu sağlayıp sağlamadığını kontrol eder. Eğer koşula uyan bir eleman dahi varsa sonuç olarak "true" verir.
$R(0, 2).any()
// true (ikinci döngüde 2=true)
$H({ opt1: null, opt2: false, opt3: ‘’, opt4: ‘pfew!’ }).any(function(pair) { return pair.value; })
// true (sadece "opt4" geçerli olsa bile sonuç olarak "true" verir)
.collect
"map" ile eşdeğerdir. Tüm küme elemanlarına belirtilen işlemci (iterator) sonucunu uygular.
$R(1,5).collect(function(n) {return n * n;})
// [1, 4, 9, 16, 25]
.detect
"find" ile eşdeğerdir.
.each
Daha önce anlatılmıştı.
.entries
"toArray" ile eşdeğerdir.
.find
"detect" ile eşdeğerdir. Küme elemanlarından uygulanan işlemcide "true" veren ilk değeri döndürür. "findAll" metodunun belirtilen koşula uyan ilk değeri döndüren kısa döngü şeklinde olanıdır.
// Opsiyonel ve bir koşula göre asal sayı tespiti
function isPrime(n) {
if (2 > n) return false;
if (0 == n % 2) return (2 == n);
for (var index = 3; n / index > index; index += 2)
if (0 == n % index) return false;
return true;
}
$R(10,15).find(isPrime)
// 11
.findAll
Küme elemanları içinde işlemcide "true" koşulunu sağlayan tüm değerleri döndürür.
$R(1, 10).findAll(function(n) { return 0 == n % 2; })
// [2, 4, 6, 8, 10]
.grep
Küme elemanlarından düzenli ifade (regular expression) deyimine uyan bütün elemanları döndürür.
$('myTable').descendants().grep(/t[dh]/, function(node) {
return node.tagName.toLowerCase();
})
// sadece tablo içindeki td/th elemanları
.include
"member" ile eşdeğerdir. Bir elemanın belirtilen küme içerisinde olup olmadığını kontrol eder. Kontrol "==" operatörü ile yapılır. (Buradaki eşitlik operatörü "===" değildir. Yani tam eşitlik değil sadece değer eşitliği kontrol edilir.)
['hello', 'world'].include('HELLO')
// false
[1, 2, ‘3′, ‘4′, ‘5′].include(3)
// true (== tırnaklı yazımı yok sayar, sadece değerin eşit olup olmadığına bakar)
.inject
Belirtilen işlemcinin sonucundan başarılı dönen değerler doğrultusunda, artarak ilerleyen bir sonuç inşa eder. Genelde bir kümeden veya dizi den başka bir dizi üretmek için kullanılır.
var array1 = [];
var array2 = [1, 2, 3].inject(array1, function(array, value) {
array.push(value * value);
return array;
});
array2
// [1, 4, 9]
array1
// [1, 4, 9]
array2.push(16);
array1
// [1, 4, 9, 16]
.invoke
"each" ve "collect" metotlarının biraz daha optimize edilmiş şeklidir. Bütün küme elemanlarına aynı fonksiyonu aynı parametreler ile uygular. Kullanım açısından daha düzenli bir yapıya sahiptir.
['hello', 'world', 'cool!'].invoke('substring', 0, 3)
// [’hel’, ‘wor’, ‘coo’]
Sayfalar: 1 2
Toplamda 4547 kez okunmuş.
Şu an 1 kişi okuyor.
En fazla 4 kişi aynı anda okumuş.
Bugün 14 kez okunmuş.
Etiketler: javascript, prototype
Trackback Yorumları takip et Baskı Önizleme

(12 oy, ortalama 4.42)
# ayşe | 01 Mayıs 2007, 16:36
Teşekkürler…
.reject fonksiyonunda mesaj kutusunun [1, 3, 5, 7, 9] göstermesini sağlayamadım. Nasıl olacaktı?
# ayşe | 01 Mayıs 2007, 17:02
Sorun halloldu.
var dizi = $R(1, 10).reject(function(n) { return 0 == n % 2; })
alert(dizi); // 1,3,5,7,9
# ayşe | 01 Mayıs 2007, 17:20
Numarayı stringe çevirebiliyorum.
var a = 1234 ;
alert(typeof(a)); // number
var b = a.toString();
alert(typeof(b)); // string
alert(a==b); // true
alert(a===b); // false
Ama stringi numaraya çeviremiyorum. Nasıl yapmam gerekiyor?
# orhan | 03 Mayıs 2007, 10:42
Prototype içinde varmı böyle bir olay tam hatırlamıorum ama JavaScript için değişkenin değerini etkilemeyecek aritmetik işlemler ile bunu yapabiliyoruz
var numValue = stringValue - 0;
/* veya */
var numValue = stringValue * 1;
/* veya */
var numValue = stringValue / 1;
bir diğer yöntem de
var numValue = Number(stringValue);
http://www.jibbering.com/faq/faq_notes/type_convert.html
# ayşe | 03 Mayıs 2007, 23:39
Teşekkürler…
# ayşe | 05 Mayıs 2007, 12:28
Dizidekilerin toplamını buluyorduk. Ama hangisi ile yaptığımızı hatırlayamadım.
var dizi = [1,2,3,4,5]
alert(dizidekilerin toplamı) // 15
# eburhan | 05 Mayıs 2007, 12:36
$R(1,5).inject(0, function(acc, n) { return acc + n; }) şeklinde toplayabilirsiniz.
Ayrıca buradan api dökümanını indirebilirsiniz. Unuttuğunuz birşey olduğunda hızlıca bakabilirsiniz.