internet pencereler Android
Genişletmek

Diziler ve koleksiyonlar için JS'yi foreach. Javascript'te tüm söndürme dizisi yöntemleri

  • I. Mevcut Makinelerin Beyni
    1. Foreach yöntemi ve ilgili yöntemler
    2. Çevirmek
    3. Döngünün uygun şekilde kullanımı ...
    4. (İteratörün örtülü kullanımı) için bisiklete bindirin.
    5. İterator'un Açık Kullanımı
    1. Gerçek dizileri söndürmek için yöntemler kullanmak
    2. Gerçek bir diziye dönüşüm
    3. Nesnelerde not

I. Mevcut Makinelerin Beyni

Şu anda, gerçek dizinin kırılmasının üç yolu var:
  1. array.prototype.foreach yöntemi;
  2. için klasik döngü;
  3. "Doğru" inşa bisiklet ... in.
Buna ek olarak, yakında, yeni ECMAScript 6 standardının (ES 6) ortaya çıkmasıyla, iki yolu daha bekleniyor:
  1. (İteratorun örtük kullanımı) için ...
  2. İteratörün açıkça kullanımı.

1. Foreach yöntemi ve ilgili yöntemler

Projeniz ECMASCript 5 (ES5) standartlarını desteklemek için tasarlanmışsa, yeniliklerinden birini - foreach yöntemi kullanabilirsiniz.

Kullanım Örneği:
var a \u003d ["a", "b", "c"]; A.Fireach (konsol.log (giriş);));
Genel olarak, foreach kullanımı, bu yöntem için yerel bir desteğe sahip olmayan tarayıcılar için ES5-Shim emülasyon kütüphanesi gerektirir. Bunlar, bazı yerlerde hala kullanılan IE 8 ve önceki sürümleri içerir.

Foreach'in avantajları, yerel değişkenleri, dizini ve dizinin mevcut elemanının değerini, otomatik olarak aralıklarla argüman olarak (sütunlar) aralıklarla iletildikleri için

Her bir eleman için Columus'u çağırmanın olası maliyeti konusunda endişeliyseniz, endişelenmeyin ve okumayın.

Foreach, dizinin tüm unsurlarının tadını çıkarmak için tasarlanmıştır, ancak yanında ES5, tüm veya belirli unsurların büstü için birkaç daha yararlı yöntem sunar.

  • her - Columus dizisinin her bir elemanının her bir elemanı için doğru döndürür TRUE'a verilen değeri döndürür.
  • bazıları - en azından Columus dizisinin bir elemanı için doğru döndürür, doğru olarak verilen değeri döndürür.
  • filtre - Sütunların doğru döndüğü kaynak dizinin elemanları da dahil olmak üzere yeni bir dizi oluşturur.
  • harita - müstehcen sütunların değerlerinden oluşan yeni bir dizi oluşturur.
  • küçült - Bir diziyi, dizinin her bir elemanına dönüşerek, birinci sınıftan başlayarak, birinci sınıftan başlayarak bir diziyi azaltır (dizi öğeleri ve diğer sonuç fonksiyonlarının miktarını hesaplamak için faydalı olabilir).
  • düşürük - azaltmak için benzer şekilde çalışır, ancak öğeleri ters sırayla hareket ettirir.

2. için döngü

Direksiyon için iyi yaşlı:

Var a \u003d ["a", "b", "c"]; Var indeksi; İçin (index \u003d 0; indeks< a.length; ++index) { console.log(a); }
Dizinin uzunluğu tüm döngü boyunca değişmediyse ve döngü kendisi kodun verimliliğine aitse (muhtemel olmayan), daha sonra dizi uzunluğunun depolanması ile "daha optimum" bir sürüm kullanabilirsiniz:

Var a \u003d ["a", "b", "c"]; Var indeksi, len; için (indeks \u003d 0, len \u003d a.length; indeks< len; ++index) { console.log(a); }
Teorik olarak, bu kod öncekinden biraz daha hızlı gerçekleştirilmelidir.

Elemanların sıkıntısı için prosedür önemli değilse, o zaman optimizasyon açısından daha da ileri gidebilir ve diğerinin uzunluğunu depolamak için değişkenden kurtulabilirsiniz:

Var a \u003d ["a", "b", "c"]; Var indeksi; için (indeks \u003d a.length - 1; indeks\u003e \u003d 0; --index) (konsol.log (a);)
Bununla birlikte, modern JavaScript motorlarında optimizasyonlu oyunlar genellikle hiçbir şey ifade etmiyor.

3. Döngünün uygun şekilde kullanılması ...

Döngü için ... için kullanmanızı tavsiye ederseniz, dizilerin numaralandırmasının amaçlandığı şeyin olduğu şeyin olmadığını unutmayın. Ortak yanlış anlama döngüsünün aksine ... İçinde dizi dizinleri değil, nesnenin listelenen özellikleri değildir.

Bununla birlikte, bazı durumlarda, seyrek dizileri kırmak gibi, ... için, aşağıdaki örnekte gösterildiği gibi yalnızca önlemler alındığında faydalı olabilir:

// a - yükseltilmiş dizi var a \u003d; a \u003d "a"; a \u003d "b"; a \u003d "c"; İçin (A'da var anahtar) (eğer (a.hasownproperty (anahtar) && / \u003d $$ | ^ md * $ /. Test (tuş) && anahtar<= 4294967294) { console.log(a); } }
Bu örnekte, döngünün her bir yinelemesinde iki kontrol yapılır:

  1. dizinin ad tuşuyla kendi mülkiyeti olması (prototipinden miras alınmaz).
  2. anahtarın, değeri 4294967294'ten daha az olan bir tamsayı bir ondalık kaydı içeren bir dizedir. Son numara nereden geliyor? ES5'teki bir dizi indeksinin tanımından, aşağıdaki en büyük endeksin, dizideki bir öğeye sahip olabilecek en büyük endekstin: (2 ^ 32 - 2) \u003d 4294967294.
Tabii ki, bu tür kontroller, döngü yürütüldüğü zaman ekstra zaman sürecektir. Ancak, rarefied bir dizi durumunda, bu yöntem, bu durumda yalnızca bu elemanların dizide açıkça tanımlandığı için daha verimlidir. Bu nedenle, yukarıdaki örnekte, sadece 3 yineleme gerçekleştirilecektir (0, 10 ve 10.000 indeksler için) - döngüsünde 10001'e karşı.

Her türlü hacimli bir kontrol kodunu yazmamak için, masif gerekli olduğunda, ayrı bir işlev olarak düzenlemek mümkündür:

Fonksiyon arrayhasownIndex (dizi, anahtar) (dönüş array.hasownproperty (anahtar) && / \u003d türü $ | ^ md * $ /. Test (tuş) && tuşu<= 4294967294; }
Daha sonra, örneğin döngüsünün gövdesi önemli ölçüde azaltılacaktır:

İçin (eğer (arraysownIndex (a, anahtar)) (konsol.log (a);))
Yukarıda tartışılan denetim kodu, tüm durumlar için uygundur. Ancak bunun yerine, resmen ve tam olarak doğru olmasa da, daha kısa bir versiyon kullanabilirsiniz, ancak yine de, çoğu durumda uygundur:

İçin (i.hasownproperty (anahtar) && string (Parseint (anahtar, 10)) \u003d\u003d\u003d anahtar) (konsol.log (a);))

4. (İteratörün Örtüsü Kullanımı)

ES6, hala taslak durumundayken, JavaScript'te yineleme girmeleri gerekir.

Yineleyici - Bu, bir değer dizisi (sonlu veya sonsuz) elde etmek için standart yöntemi belirleyen bir nesne tarafından uygulanan bir protokoldür.
İterator, bir sonraki () yönteminin tanımlandığı bir nesnedir - bir nesneyi iki özelliğe sahip bir nesneyi döndüren argümanlar olmayan bir işlevdir:

  1. yAPILDI (Boolean) - İteratör elde edilen dizinin sonuna ulaşırsa gerçek olur. Aksi takdirde, yanlış bir değere sahiptir.
  2. değer - iterator tarafından döndürülen değeri belirler. Yapılan özelliği doğruysa tanımlanamayabilir (yok).
Birçok yerleşik nesne, dahil. Bu diziler, varsayılan yineleyicilere sahiptir. Yinelatörü gerçek dizilerde kullanmanın en basit yolu, yeni bir şey kullanmaktır.

Kullanma örneği ...

Var val; var a \u003d ["a", "b", "c"]; İçin (a) (Console.log (val);)
Yukarıdaki örnekte, dolaylı olarak bir dizi değerini elde etmek için bir dizi nesnesi yineleyici çağırır.

5. Yinelatörün Açık Kullanımı

Bununla birlikte, yineleyatörler de kullanılabilir ve açıkça kullanılabilir, bu durumda kod, döngünün için karşılaştırıldığında, kod çok daha karmaşık hale gelir. Buna benziyor:

Var a \u003d ["a", "b", "c"]; var it \u003d a.entries (); Var girişi; Süre (! (Giriş \u003d it.next ()). Bitti) (konsol.log (giriş.value);)
Bu örnekte, array.prototype.entries yöntemi, dizinin değerlerini görüntülemek için kullanılan bir yineleyici döndürür. Her yineleme girişi.Value, formun bir dizisini içerir [anahtar, değer].

II. Büyük benzeri nesnelerin büstü

Gerçek dizilere ek olarak, JavaScript de bulunur. büyük benzeri nesneler . Gerçek dizilerle, akrabaları, dizinin elemanlarına karşılık gelen sayılar biçiminde, uzunluk ve özelliklerin özelliklerine sahip olmaları ile ilgilidir. Herhangi bir fonksiyon / yöntemde mevcut olan Nodelist DOM koleksiyonu ve sahte argümanları arayabilirsiniz.

1. Gerçek dizileri söndürme yollarını kullanma

En azından çoğu, eğer olmasa da, büyük benzeri nesneleri numaralandırmak için gerçek dizileri söndürme yöntemleri uygulanabilir.

İçin ve için tasarımlar ..., nesnelere gerçek dizilerle aynı şekilde, kitlesel olarak benzer şekilde uygulanabilir.

Foreach ve diğer diziler.Prototip yöntemleri de büyük nesneler için geçerlidir. Bunu yapmak için, file.call veya işlevi kullanın.

Örneğin, childNodes nesne düğümünün özelliğine foreach uygulamak istiyorsanız, bu şöyle yapılır:

Array.prototype.foreach.call (node.childnodes, fonksiyon (çocuk) (// nesne çocuğuyla her şeyi yap));
Bu alımın yeniden kullanılması kolaylığı için, Array.Prototype.Fireach yöntemine bir bağlantıyı ayrı bir değişkende ilan edebilir ve bir azalma olarak kullanabilirsiniz:

// (Aşağıdaki tüm kodların bir görünürlük alanında olduğu varsayılmaktadır) var Foreach \u003d array.prototype.foreach; // ... foreach.call (node.childnodes, fonksiyon (çocuk) (// çocuk nesnesiyle bir şey yap));
Bir dizi benzeri nesne bir yineleyici ise, nesnenin gerçek diziler için olduğu gibi, nesnenin bütünlüğü için açıkça veya dolaylı olarak kullanılabilir.

2. Bu diziye dönüşüm

Bir diğeri, çok basit, bir kol benzeri nesneyi numaralandırmanın bir yolu var: onu gerçek bir diziye dönüştürün ve yukarıda tartışılan mevcut dizilerin yöntemlerinden birini kullanın. Dönüşüm için, herhangi bir masif nesneye uygulanabilecek Universal Array.Prototype.Slice yöntemini kullanabilirsiniz. Aşağıdaki örnekte gösterildiği gibi çok basit yapılır:

Var truearray \u003d array.protype.slice.call (arraylikeObject, 0);
Örneğin, Nodelist koleksiyonunu gerçek bir diziye dönüştürmek istiyorsanız, yaklaşık olarak böyle bir koda ihtiyacınız vardır:

Var divs \u003d array.prototype.slice.call (belge.queryselectorall ("div"), 0);
Güncelleme.: Rock ve Torbasow yorumlarında belirtildiği gibi, array.prototype yerine ES6'da, daha fazla görsel bir array kullanabilirsiniz. Yöntem.

3. Yürütme ortamının nesnelerine dikkat edin

Array.Prototype yöntemlerini uygulama ortamının nesnelerine (örneğin, DOM koleksiyonu gibi) uyguladıysanız, bu yöntemlerin doğru çalışmasının tüm yürütme ortamlarında (tarayıcılar dahil) garanti edilmediğini unutmayın. Belirli bir nesnenin belirli bir egzersiz ortamındaki davranışına, daha kesin olarak, bu nesnede soyut bir HASProperty işleminin nasıl uygulandığından. Sorun, ES5 standardının, nesnenin bu işlem açısından yanlış davranışı olasılığına izin vermesidir (bkz. §8.6.2).

Bu nedenle, başvurunuzu kullanmayı planladığınız her bir yürütme ortamında (tarayıcı) array.prototip yöntemlerinin çalışmalarını test etmek önemlidir.

  • I. Mevcut Makinelerin Beyni
    1. Foreach yöntemi ve ilgili yöntemler
    2. Çevirmek
    3. Döngünün uygun şekilde kullanımı ...
    4. (İteratörün örtülü kullanımı) için bisiklete bindirin.
    5. İterator'un Açık Kullanımı
  • II. Büyük benzeri nesnelerin büstü
    1. Gerçek dizileri söndürmek için yöntemler kullanmak
    2. Gerçek bir diziye dönüşüm
    3. Nesnelerde not

I. Mevcut Makinelerin Beyni

Şu anda, gerçek dizinin kırılmasının üç yolu var:

  1. array.prototype.foreach yöntemi;
  2. için klasik döngü;
  3. "Doğru" inşa bisiklet ... in.

Buna ek olarak, yakında, yeni ECMAScript 6 standardının (ES 6) ortaya çıkmasıyla, iki yolu daha bekleniyor:

  1. (İteratorun örtük kullanımı) için ...
  2. İteratörün açıkça kullanımı.

1. Foreach yöntemi ve ilgili yöntemler

Projeniz ECMASCript 5 (ES5) standartlarını desteklemek için tasarlanmışsa, yeniliklerinden birini - foreach yöntemi kullanabilirsiniz.

Kullanım Örneği:

Var a \u003d ["a", "b", "c"]; A.Fireach (konsol.log (giriş);));

Genel olarak, foreach kullanımı, bu yöntem için yerel bir desteğe sahip olmayan tarayıcılar için ES5-Shim emülasyon kütüphanesi gerektirir. Bunlar, bazı yerlerde hala kullanılan IE 8 ve önceki sürümleri içerir.

Foreach'in avantajları, yerel değişkenleri, dizini ve dizinin mevcut elemanının değerini, otomatik olarak aralıklarla argüman olarak (sütunlar) aralıklarla iletildikleri için

Her bir eleman için Columus'u çağırmanın olası maliyeti konusunda endişeliyseniz, endişelenmeyin ve okumayın.

foreach, dizinin tüm unsurlarının tadını çıkarmak için tasarlanmıştır, ancak yanında ES5, tüm veya belirli unsurların büstü için, bunlarla herhangi bir işlemle yapılan performanslar için birkaç daha yararlı yöntem sunar:

  • her - Columus dizisinin her bir elemanının her bir elemanı için doğru döndürür TRUE'a verilen değeri döndürür.
  • bazıları - en azından Columus dizisinin bir elemanı için doğru döndürür, doğru olarak verilen değeri döndürür.
  • filtre - Sütunların doğru döndüğü kaynak dizinin elemanları da dahil olmak üzere yeni bir dizi oluşturur.
  • harita - müstehcen sütunların değerlerinden oluşan yeni bir dizi oluşturur.
  • küçült - Bir diziyi, dizinin her bir elemanına dönüşerek, birinci sınıftan başlayarak, birinci sınıftan başlayarak bir diziyi azaltır (dizi öğeleri ve diğer sonuç fonksiyonlarının miktarını hesaplamak için faydalı olabilir).
  • düşürük - azaltmak için benzer şekilde çalışır, ancak öğeleri ters sırayla hareket ettirir.

2. için döngü

Direksiyon için iyi yaşlı:

Var a \u003d ["a", "b", "c"]; Var indeksi; İçin (index \u003d 0; indeks< a.length; ++index) { console.log(a); }

Dizinin uzunluğu tüm döngü boyunca değişmediyse ve döngü kendisi kodun verimliliğine aitse (muhtemel olmayan), daha sonra dizi uzunluğunun depolanması ile "daha optimum" bir sürüm kullanabilirsiniz:

Var a \u003d ["a", "b", "c"]; Var indeksi, len; için (indeks \u003d 0, len \u003d a.length; indeks< len; ++index) { console.log(a); }

Teorik olarak, bu kod öncekinden biraz daha hızlı gerçekleştirilmelidir.

Elemanların sıkıntısı için prosedür önemli değilse, o zaman optimizasyon açısından daha da ileri gidebilir ve diğerinin uzunluğunu depolamak için değişkenden kurtulabilirsiniz:

Var a \u003d ["a", "b", "c"]; Var indeksi; için (indeks \u003d a.length - 1; indeks\u003e \u003d 0; --index) (konsol.log (a);)

Bununla birlikte, modern JavaScript motorlarında optimizasyonlu oyunlar genellikle hiçbir şey ifade etmiyor.

3. Döngünün uygun şekilde kullanılması ...

Döngü için ... için kullanmanızı tavsiye ederseniz, dizilerin numaralandırmasının amaçlandığı şeyin olduğu şeyin olmadığını unutmayın. Ortak yanlış anlama döngüsünün aksine ... İçinde dizi dizinleri değil, nesnenin listelenen özellikleri değildir.

Bununla birlikte, bazı durumlarda, seyrek dizileri kırmak gibi, ... için, aşağıdaki örnekte gösterildiği gibi yalnızca önlemler alındığında faydalı olabilir:

// a - yükseltilmiş dizi var a \u003d; a \u003d "a"; a \u003d "b"; a \u003d "c"; İçin (A'da var anahtar) (eğer (A.Hasownproperty (anahtar) && / \u003d $$$$$ /. Test (tuş) && anahtar<= 4294967294) { console.log(a); } }

Bu örnekte, döngünün her bir yinelemesinde iki kontrol yapılır:

  1. dizinin ad tuşuyla kendi mülkiyeti olması (prototipinden miras alınmaz).
  2. anahtarın, değeri 4294967294'ten daha az olan bir tamsayı bir ondalık kaydı içeren bir dizedir. Son numara nereden geliyor? ES5'teki bir dizi indeksinin tanımından, aşağıdaki en büyük endeksin, dizideki bir öğeye sahip olabilecek en büyük endekstin: (2 ^ 32 - 2) \u003d 4294967294.

Tabii ki, bu tür kontroller, döngü yürütüldüğü zaman ekstra zaman sürecektir. Ancak, rarefied bir dizi durumunda, bu yöntem, bu durumda yalnızca bu elemanların dizide açıkça tanımlandığı için daha verimlidir. Bu nedenle, yukarıdaki örnekte, sadece 3 yineleme gerçekleştirilecektir (0, 10 ve 10.000 indeksler için) - döngüsünde 10001'e karşı.

Her türlü hacimli bir kontrol kodunu yazmamak için, masif gerekli olduğunda, ayrı bir işlev olarak düzenlemek mümkündür:

Fonksiyon arrayhasownIndex (dizi, anahtar) (dönüş array.hasownproperty (anahtar) && / /0$|^Dw/.Test(Key) && anahtar<= 4294967294; }

Daha sonra, örneğin döngüsünün gövdesi önemli ölçüde azaltılacaktır:

İçin (eğer (arraysownIndex (a, anahtar)) (konsol.log (a);))

Yukarıda tartışılan denetim kodu, tüm durumlar için uygundur. Ancak bunun yerine, resmen ve tam olarak doğru olmasa da, daha kısa bir versiyon kullanabilirsiniz, ancak yine de, çoğu durumda uygundur:

İçin (i.hasownproperty (anahtar) && string (Parseint (anahtar, 10)) \u003d\u003d\u003d anahtar) (konsol.log (a);))

4. (İteratörün Örtüsü Kullanımı)

ES6, hala taslak durumundayken, JavaScript'te yineleme girmeleri gerekir.

Yineleyici - Bu, bir değer dizisi (sonlu veya sonsuz) elde etmek için standart yöntemi belirleyen bir nesne tarafından uygulanan bir protokoldür.
Nesnenin bir sonraki () yöntemini tanımlarsa, bir yineleyici vardır - argümanlar olmayan işlevi, iki özelliğine sahip bir nesneyi döndürür:

  1. yAPILDI (Boolean) - İteratör elde edilen dizinin sonuna ulaşırsa gerçek olur. Aksi takdirde, yanlış bir değere sahiptir.
  2. değer - iterator tarafından döndürülen değeri belirler. Yapılan özelliği doğruysa tanımlanamayabilir (yok).

Birçok yerleşik nesne, dahil. Bu diziler, varsayılan yineleyicilere sahiptir. Yinelatörü gerçek dizilerde kullanmanın en basit yolu, yeni bir şey kullanmaktır.

Kullanma örneği ...

Var val; var a \u003d ["a", "b", "c"]; İçin (a) (Console.log (val);)

Yukarıdaki örnekte, dolaylı olarak bir dizi değerini elde etmek için bir dizi nesnesi yineleyici çağırır.

5. Yinelatörün Açık Kullanımı

Bununla birlikte, yineleyatörler de kullanılabilir ve açıkça kullanılabilir, bu durumda kod, döngünün için karşılaştırıldığında, kod çok daha karmaşık hale gelir. Buna benziyor:

Var a \u003d ["a", "b", "c"]; Var girişi; Süre (! (Giriş \u003d A.Next ()). Bitti) (konsol.log (giriş.value);)

II. Büyük benzeri nesnelerin büstü

Gerçek dizilere ek olarak, JavaScript de bulunur. büyük benzeri nesneler . Gerçek dizilerle, akrabaları, dizinin elemanlarına karşılık gelen sayılar biçiminde, uzunluk ve özelliklerin özelliklerine sahip olmaları ile ilgilidir. Herhangi bir fonksiyon / yöntemde mevcut olan Nodelist DOM koleksiyonu ve sahte argümanları arayabilirsiniz.

1. Gerçek dizileri söndürme yollarını kullanma

En azından çoğu, eğer olmasa da, büyük benzeri nesneleri numaralandırmak için gerçek dizileri söndürme yöntemleri uygulanabilir.

İçin ve için tasarımlar ..., nesnelere gerçek dizilerle aynı şekilde, kitlesel olarak benzer şekilde uygulanabilir.

foreach ve diğer diziler.Prototip yöntemleri de büyük nesneler için geçerlidir. Bunu yapmak için, file.call veya işlevi kullanın.

Örneğin, childNodes nesne düğümünün özelliğine foreach uygulamak istiyorsanız, bu şöyle yapılır:

Array.prototype.foreach.call (node.childnodes, fonksiyon (çocuk) (// nesne çocuğuyla her şeyi yap));

Bu alımın yeniden kullanılması kolaylığı için, Array.Prototype.Fireach yöntemine bir bağlantıyı ayrı bir değişkende ilan edebilir ve bir azalma olarak kullanabilirsiniz:

// (Aşağıdaki tüm kodların bir görünürlük alanında olduğu varsayılmaktadır) var Foreach \u003d array.prototype.foreach; // ... foreach.call (node.childnodes, fonksiyon (çocuk) (// çocuk nesnesiyle bir şey yap));

Bir dizi benzeri nesne bir yineleyici ise, nesnenin gerçek diziler için olduğu gibi, nesnenin bütünlüğü için açıkça veya dolaylı olarak kullanılabilir.

2. Bu diziye dönüşüm

Bir diğeri, çok basit, bir kol benzeri nesneyi numaralandırmanın bir yolu var: onu gerçek bir diziye dönüştürün ve yukarıda tartışılan mevcut dizilerin yöntemlerinden birini kullanın. Dönüşüm için, herhangi bir masif nesneye uygulanabilecek Universal Array.Prototype.Slice yöntemini kullanabilirsiniz. Aşağıdaki örnekte gösterildiği gibi çok basit yapılır:

Var truearray \u003d array.protype.slice.call (arraylikeObject, 0);

Örneğin, Nodelist koleksiyonunu gerçek bir diziye dönüştürmek istiyorsanız, yaklaşık olarak böyle bir koda ihtiyacınız vardır:

Var divs \u003d array.prototype.slice.call (belge.queryselectorall ("div"), 0);

3. Yürütme ortamının nesnelerine dikkat edin

Array.Prototype yöntemlerini uygulama ortamının nesnelerine (örneğin, DOM koleksiyonu gibi) uyguladıysanız, bu yöntemlerin doğru çalışmasının tüm yürütme ortamlarında (tarayıcılar dahil) garanti edilmediğini unutmayın. Belirli bir nesnenin belirli bir egzersiz ortamındaki davranışına, daha kesin olarak, bu nesnede soyut bir HASProperty işleminin nasıl uygulandığından. Sorun, ES5 standardının, nesnenin bu işlem açısından yanlış davranışı olasılığına izin vermesidir (bkz. §8.6.2).

Bu nedenle, başvurunuzu kullanmayı planladığınız her bir yürütme ortamında (tarayıcı) array.prototip yöntemlerinin çalışmalarını test etmek önemlidir.

Tanım ve Uygulama

JavaScript yöntemi her biri için () Artan bir siparişte dizideki her bir öğe için iletilen işlevi bir kez yapmanızı sağlar.

Lütfen geri arama işlevinin yöntem parametresi olarak geçtiğini unutmayın. her biri için () Uzaktan veya cevapsız dizi öğelerine neden olmaz.

Yöntem kullanılarak işlenmiş öğelerin aralığı her biri için () Önce yüklü ilk Bir geri arama işlevini arayın. Elemanları aramadan sonra diziye eklenmişse, bu tür öğelerde fonksiyon çağrılmayacaktır.

Dizinin mevcut öğelerinin değerleri, yürütme sırasında değiştirilirse, iletilen işlev olarak değer, yöntemin o zamanın değeri olacaktır. her biri için () onları ziyaret eder. Öğeler ziyaretlerinden önce kaldırılırsa, bu tür öğeler ziyaret edilmeyecektir. Zaten ziyaret edilen öğeler, dizi geçiş sırasında kaldırılırsa, daha sonra öğeler atlanır.

Destek tarayıcıları

Yöntem
Opera.

İexplorer.

Kenar.
her biri için () EvetEvetEvetEvet9.0 Evet

Javascript Sözdizimi:

// sadece geri arama özelliği ile dizi..Fireach (fonksiyon (fonksiyon) ( mevcut değer., indeks, arr.)); // Anahtar kelimenin başvurabileceği bir nesneyi kullanma dizi..Fireach (fonksiyon (fonksiyon) ( mevcut değer., indeks, arr.), bu değer.);

Javascript versiyonu

ECMAScript 5.1 (JavaScript 1.6'da uygulanır)

Parametre değerleri

ParametreAçıklama
İşlevi. Yürütülecek geri arama özelliği bir Dizideki her öğe için bir kez. İşlev aşağıdaki parametreleri alır:
  • mevcut değer. - Geçerli elemanın değeri
  • indeks - Geçerli elemanın dizisinin endeksi.
  • arr. - Geçerli elemanın ait olduğu bir dizi (pasajın olduğu uyarınca).

Bir şey, yöntemin bir parametresi olarak iletilirse, işlevin nesnesi olmayan istisna neden olur. TypeError.. Zorunlu parametre.

bu değer. Geri arama işlevinin içindeki bu anahtar kelimesine başvurabilecek bir nesne. Parametre ise bu değer. Kullanılmamış, sonra bunun bir değeri tanımsız olarak kullanılacaktır (nihayetinde bu, fonksiyon bağlamının olağan kurallarına bağlı olacaktır). İsteğe bağlı parametre.

Kullanım örneği

Aşağıdaki örnekte, dizinin tüm unsurlarının miktarının nasıl elde edileceğine bakacağız. Javascript. yöntem her biri için ():

var array \u003d; var sum \u003d 0; // sayısal bir değer içeren değişkeni başlat dizi..Her biri için ( // dizi dizisinin tüm unsurlarını izleyin Fonksiyon Sumnumber ( mevcut değer.) { toplamı. += mevcut değer.; )); Konsol .log ( toplamı.); // toplam değişkenin değerini 50'ye eşit olarak göster

Aşağıdaki örnekte, kullanıma bakacağız. İkinci Argüman yöntemi her biri için ()Bu, bu anahtar kelimeyi geri arama işlevinin içinde kullanabileceğimiz bir nesneyi belirtir:

var numaraları \u003d; // bir dizi sayısal değer içeren bir değişkeni başlat Var kare \u003d; // Boş bir diziyi içeren bir değişkeni başlat var myobject \u003d ( // bir nesneyi içeren değişkeni başlat Kare: İşlev ( mevcut değer.) { // değeri alan nesne yöntemi Dönüş. mevcut değer. * mevcut değer.; // ve kareye dikilmiş döndürür } } ; sayılar..Her biri için ( // sayılar dizisinin tüm unsurlarını izleyin İşlevi ( mevcut değer.) { kare..Push (bu .square ( mevcut değer.)); // MyObject nesnesinin kare yönteminin kare dönüş değerinin bir dizisini ekleyin } , myObject. // bu anahtar kelimeyi kullanarak atıfta bulunduğumuz nesne); Konsol .log ( kare.); // Kare değişkenin değerini eşit olarak göster;

Çok uzun zaman önce beni aldı Javascript bir ilişkisel dizilim oluşturun. Şaşırtıcı bir şekilde, daha önce hiç gerek yoktu Javascript.. İnternette arama yapmak için tırmandım, nasıl yapılır. Ve çok sayıda insanın imkansız olduğunu yazmaya çok şaşırdı. Javascript. O değil. Neyse ki, uzun yıllar süren tecrübem, bana saçma kaldıklarını söyledi. Bu nedenle, sonunda öğrendim javascript'te İlişkilendirici Bir Dizi Nasıl OluşturulurBu makalede size ne anlatırsınız.

Kod aşağıda yazılmıştır. İlişkisel dizi oluşturulduArdından başka bir öğe eklenir ve Son olarak, dizi döngü boyunca hareket eder:

Bu makalede inceledik İlişkili Masifler Oluşturma, değişimleri, çevrim boyunca tam büstü İçin. Şahsen kullandım javascript'te İlişkilendirici Diziler Sadece bir gün, ancak böyle bir olasılık hakkında bilmek gerekir.

JQuery'nin her bir kütüphanenin işlevini ve yöntemini kullanmak için örnekler üzerinde düşündüğümüz bir makale.

JQuery Kütüphanesinde, her biri adına 2 farklı varlık var.

İlk (jquery.Each), bir dizinin veya nesne elemanlarının kaba bir kuvvetini yapabileceğiniz evrensel bir jquery işlevidir.

İkincisi (her), üzerinde bir döngü düzenlemek için eleman kümesi için geçerli olan bir yöntemdir.

Her (jquery.Each) döngüsü. Kullanma örnekleri

Her biri sözdizimi işlevi:

// dizi veya nesne - bir dizi veya nesne, öğeleri veya özellikleri sıralanması gereken // geri arama - her dizi öğesi veya nesne özelliği $ .ECHECH (dizi veya nesne, geri arama) için gerçekleştirilecek bir fonksiyon;

Her işlevle çalışmak örneklere bakacaktır.

Örnek numara 1. Dizinin tüm unsurlarının faili (dizi) tarafından gerçekleştirilecektir.

// 3 satırdan oluşan dizi var array \u003d ["araba", "kamyon", "otobüs"]; // arr sonra $ .Each dizi (ARR, işlev (dizin, değer) (// dizinin her bir eleman için gerçekleştirilecek eylemler /////////////////////) Değer, dizinin geçerli elemanının değeridir // konsol konsolundaki dizinin değerini ve dizinin değerini çekin ("Dizin:" + index + "; değer:" + değeri);)); / * Sonuç (Konsolda): Dizin: 0; Değer: Araba Endeksi: 1; Anlamı: Kamyon endeksi: 2; Değer: Otobüs * /

Yukarıdaki kodda, her işlev bir diziyi numaralandırmak için kullanılır. İşlev var 2 Zorunlu parametreler. İlk parametre, özü (dizi veya nesne), elemanları (özellikler) sıralanmalıdır. Bu durumda, bu bir ok dizisidir. İkinci parametre, her bir eleman için (bu durumda) dizisi için gerçekleştirilecek bir geri arama işlevidir. İçinde uygun değişkenlerle mevcut 2 parametreye sahiptir. İlk parametre, elemanın sıra numarasıdır (geri sayım 0'dan gerçekleştirilir). İkinci parametre, dizinin geçerli elemanının değeridir.

Örnek 2. Bu örnekte, nesnenin tüm özelliklerine varacağız.


// 5 var akıllı telefona sahip akıllı telefon nesnesi \u003d ("Adı" Özellikleri: "LG G5 SE", "Yıl": "2016", "Ekran boyutu": "5.3", "Ekran çözünürlüğü": "2560 x 1440" , "OS": "Android 6.0 (Marshmallow)"); // Sizden sonra Sizden Sonra Smartphone $ .ECH (akıllı telefon, işlev (anahtar, değer) (// her nesne özelliği // tuşu için yürütülecek eylemler - dizi // değerin özelliklerinin geçerli adı - Mevcut nesne özelliğinin değeri // Mülkiyet adını ve değerini Console Console.log ("Özellik:" + Key + "; Değer:" + değeri);)); / * Sonuç (Konsolda): Özellik: İsim; Değer: LG G5 SE Özelliği: Yıl; Değer: 2016 Özellik: Ekran boyutu; Değer: 5.3 Özellik: Ekran çözünürlüğü; Değeri: 2560 x 1440 Özellik: OS; Anlamı: Android 6.0 (Hatmi) * /

Her fonksiyon, JavaScript nesnelerini hareket ettirmek için kullanılabilir. Kullanımı arasındaki fark, yalnızca geri arama işlevinin parametrelerinin başka değerleri olduğu gerçeğinde oluşur. İlk parametre, nesne özelliklerinin adını saklar ve ikincisi bu özelliğin değeridir.

Örnek numara 3. İçinde, daha karmaşık bir yapı bulunacağız (her bir iç içe geçirmeyi nasıl kullanacağınızı düşünebilirsiniz).

// 2 özellikten oluşan nesne. Bu nesnenin her özelliği, bir değer olarak bir diziye sahiptir, elemanları da Nesneler Var Varlıklar \u003d ("Bootstrap": [("ID": "1", "Başlık": "Giriş"), ("Kimlik" : "2", "Başlık": "Nasıl ayarlanır", ("ID": "3", "Başlık": "Izgara")], "JavaScript": [("Kimlik": "4", " Başlık ":" Temeller "), (" ID ":" 5 "," Başlık ":" Eleman Örneği ")]); $ .ECH (Console.log ("bölüm:" + tuşu); $ .ECh (veri, işlev (Dizin, Değer) (Console.log ("Makale: id \u003d" + Değer [ID "] +"; ad \u003d "+ değer [" başlık "]);)));)); / * Sonuç: Bölüm: Bootstrap Makale: id \u003d 1; İsim \u003d Giriş Makale: id \u003d 2; Başlık \u003d Makale nasıl kurulur: id \u003d 3; İsim \u003d Örgü Bölümü: JavaScript Makale: id \u003d 4; İsim \u003d Temel Bilgiler Ürün: id \u003d 5; İsim \u003d öğeler örnekleme * /

Her birine nasıl kesilir (bir döngüden çıkın)?

Her döngünün kesme (kopması), RETURN ifadesi kullanılarak gerçekleştirilir, bu da değeri yanlış döndürmelidir.

Örneğin, dizideki bir ARR numarası bulduktan sonra her döngünün yürütülmesini kesiyoruz:

// 5 numaradan oluşan dizi var arr \u003d; // var bulmak istediğiniz sayı \u003d 7; // arr sonra $ .Each Dizisi (ARR, İşlev (Dizin, Değer) (// Gerekli sayı bulunursa, o zaman (değer \u003d\u003d\u003d Bul) (// konsol konsoluna çıkarın. ("Hurray!" + Bul + "Numarası Bulundu! Bu sayı bir dizin var:" + index); // Dönüş Yanlış döngüsünü kes;) Başka (// Aksi takdirde, mevcut konsol sayısını görüntülemek için .1 konsol ("Geçerli numara:" + değeri);))); / * Sonuç (konsolda): Geçerli sayı: 5 Geçerli sayı: 4 Hooray! 7 numara bulundu! Bu numaranın indeksine sahiptir: 2 * /

Bir sonraki yineleme nasıl gidilir (her biri devam eder)?

Her birinde, mevcut yineleme ve sonraki geçişin kesintisi, FALSE'den farklı bir değere sahip olması gereken iade ifadesi kullanılarak gerçekleştirilir.

// var arr \u003d sayılardan oluşan bir dizi; // var newarr \u003d değerleri hariç, arral dizisinin tüm unsurlarını içermesi gereken bir dizi; // ok arrow arrow arrow sonra (arr, fonksiyon (dizin, değer) (// ölçülürse (% 2 \u003d\u003d\u003d 0) (// PERVE, mevcut Bir sonraki dönüşe yönlendirmek ve maç yapmak;) // array newarr değerine ekleyin Newarr.Push (değer);)); Console.log ("kaynak dizisi (arr):" + arr.join ()); Konsol.log ("Sonuç Dizisi (Newarr):" + newarr.join ()); / * Sonuç (konsolda): Kaynak dizisi (arr): 3,5,4,9,17, 19,30,35,40 Sonuç dizisi (NewRr): 3,5,9,17,19,35 * /

Mevcut unsurları büstü (.ECH)

Her yöntem sözdizimi (yalnızca seçilen öğelere seçilir):


.ECH (fonksiyon); // fonksiyon - Mevcut nesnenin her bir öğesi için gerçekleştirilecek bir işlev

Yöntemin aşağıdaki örnekte nasıl çalıştığını analiz edeceğiz (DIV öğelerini aşırı büyüterek):


Yukarıdaki örnekte, her yöntem geçerli seti kullanır ($ seçici tarafından seçilen öğeler ("DIV"). Her bir yöntem işleyicisi olarak, akım aramanın her bir elemanı için gerçekleştirilecek olan bir fonksiyon her zaman gerçekleştirilir (her DIV öğesi için bu durumda). Bu fonksiyon 2 isteğe bağlı parametreye sahiptir. Bunlardan biri (indeks), mevcut yinelemenin sırası sayısıdır ve mevcut elemana ikinci (öğe) - DOM referansıdır. Ek olarak, fonksiyonun içinde, bu anahtar kelime mevcuttur, bu da ikinci parametrenin mevcut öğeye bir DOM bağlantısı içerir.

Örneğin, tüm öğeler için HREF özelliğini ve sayfada konsola çekin.

$ ("A"). Her biri (işlev () (Console.log ($ (bu) .ATTR ("href"));));

$ ("A"). Her (işlev () () () () ()) .ATTR ("HREF"); if ((((link.indexof ("http: //") \u003d\u003d 0) || .İndexof ("https: //") \u003d\u003d 0)) (konsol.log ("href referansları \u003d" + link);))); // Aşağıdaki bağlantılar sayfada bulunursa: // Yandex // Javascript nasıl çalışır? // bootstrap // Sonra konsolda aşağıdaki sonucu göreceğiz: // https://www.yandex.ru/ // http:////getbootstrap.com/

Örneğin, her döngüün, ismin adına sahip olan DOM elemanlarının (aynı sınıfın tüm öğelerini hareket ettirerek) nasıl düzenleneceğini düşünün.

Ahududu pi
tek kartlı hesaplama
Intel Galileo Gen2.
19$
Pine A64 Plus.

Örneğin, sayfadaki tüm öğeleri nasıl geçeceğinizi analiz edeceğiz.

Örneğin, sayfadaki tüm giriş öğelerinin değerini çekin.

$ ("Giriş"). Her (Console.log ($ (bu) .val ());));

Örneğin, ID \u003d "MyList" (her çocuk) ile ul olan tüm alt öğeleri hareket ettirerek.

  • HTML.
  • Javascript.

Her yöntemde jQuery'deki son indeksi (öğe) tanımlayabileceğiniz bir yöntemi düşünün.

// öğeleri seçin var mylist \u003d $ ("ul li"); // Numune VaR için öğe sayısını belirleme Varlığı \u003d mylist.Length; // Seçilen mylist'i yürütüyoruz.Each Elements (İşlev (Dizin) (eğer (index \u003d\u003d\u003d Toplam - 1) (// bu numunedeki son öğedir));