Internet Derazalar Android
Kengaytirmoq

Massivlar va to'plamlar uchun ajratish. JavaScript-da uzayishning barcha usullari

  • I. Hozirgi mashinalar miyasi
    1. Forish usuli va tegishli usullar
    2. Uchun tsikl
    3. Tsikldan to'g'ri foydalanish ... ichida
    4. Tsikl ... (Iteratordan ajralmas foydalanish)
    5. ITERERERER-dan aniq foydalanish
    1. Haqiqiy massivlarni o'chirish usullaridan foydalanish
    2. Haqiqiy qatorga aylantirish
    3. Ob'ektlar haqida eslatma

I. Hozirgi mashinalar miyasi

Ayni paytda haqiqiy qatorning elementlarini to'xtatishning uchta usuli mavjud:
  1. massiv.potopotepe.formecial usul;
  2. klassik tsikl;
  3. "To'g'ri" Ichki tsikl ... ichida.
Bundan tashqari, yaqin orada, yangi ECMASCRIPLE 6 standart (ES 6) kelishi bilan yana ikkita usul kutilmoqda:
  1. ... tsikl ... (iteratordan ajralmas foydalanish);
  2. iteratordan aniq foydalanish.

1. Forish usuli va tegishli usullar

Agar sizning loyihangiz ECMASCRIPL-ni (ES5) standartlarini qo'llab-quvvatlash uchun yaratilgan bo'lsa, siz uning innovatsiyalaridan birini ishlatishingiz mumkin.

Foydalanish namunasi:
Var A \u003d ["A", "B", "C"]; A.Foreaecation (konsol.log (kirish);));
Umuman olganda, bu usul uchun mahalliy qo'llab-quvvatlashi bo'lmagan brauzerlar uchun Es5-Simulyatsiya kutubxonasini talab qiladi. Bularga ya'ni, ya'ni 8 va ilgari ba'zi joylarda ishlatilgan versiyalar kiradi.

Ochilishning afzalliklari mahalliy o'zgaruvchini indeksni va massivning joriy elementining qiymatini saqlash uchun e'lon qilishning hojati yo'q, chunki ular avtomatik ravishda Callback funktsiyasi (Ustunlar) orqali dalillar sifatida uzatiladi.

Agar siz har bir element uchun Kolumni chaqirishning mumkin bo'lgan narxi haqida qayg'ursangiz, tashvishlanmang va o'qimang.

ORICEACEACEACESI massivning barcha elementlaridan zavqlanish uchun mo'ljallangan, ammo ES5 barcha yoki muayyan elementlarning büstülülüğü, barcha elementlarning büstülülüğü, ularning har qanday harakatlari bilan büsting uchun yanada foydali usullarni taklif etadi:

  • har bir - Columus massivining har bir elementi uchun haqiqiy bo'lsa, haqiqiy qiymatga berilgan qiymatni qaytaradi.
  • ba'zilar - agar hech bo'lmaganda kolumus qatorining bitta elementi bo'lsa, haqiqiy qiymatga berilgan qiymatni qaytaradi.
  • filtr - Yangi qatorni, shu jumladan kolonli qatorning elementlari, u ustunlar to'g'ri qaynatilganligini yaratadi.
  • xarita - odobsiz ustunlarning qadriyatlaridan iborat yangi qatorni yaratadi.
  • birinchidan boshlab qatorning har bir elementiga o'tish uchun bir nechta qiymatni qo'llash orqali bir nechta qiymatga o'tishni kamaytiring (bu qator elementlar miqdorini va boshqa natijalar miqdorini hisoblash uchun foydali bo'lishi mumkin).
  • reduseright - shunga o'xshash tarzda ishlaydi, ammo buyumlarni teskari tartibda harakatlantiradi.

2. uchun tsikl

Boshqaruv uchun yaxshi eski:

Var A \u003d ["A", "B", "C"]; Var indeks; Uchun (indeks \u003d 0; indeks)< a.length; ++index) { console.log(a); }
Agar qatorning uzunligi butun tsikl davomida o'zgarmasa va tsikl Kod unumdorligini (ehtimol emas) bir qatorda "eng maqbul" versiyasidan foydalanishingiz mumkin:

Var A \u003d ["A", "B", "C"]; Var indeks, len; uchun (indeks \u003d 0, len \u003d a.sength; indeks< len; ++index) { console.log(a); }
Nazariy jihatdan ushbu kod avvalgisidan biroz tezroq amalga oshirilishi kerak.

Agar elementlarni olib tashlash tartibi muhim bo'lmasa, unda siz optimallashtirish nuqtai nazaridan yanada optimallashtirish va o'zgaruvchidan teskari tomonga almashish uchun massivdan xalos bo'lishingiz mumkin:

Var A \u003d ["A", "B", "C"]; Var indeks; uchun (indeks \u003d a.lengt - 1; indeks\u003e \u003d 0;-konsol.log (a););)
Biroq, zamonaviy JavaScript dvigatellarida optimlashtirish bilan bunday o'yinlar odatda hech narsani anglatmaydi.

3. Tsikldan ... ichida

Agar siz ... tsiklida ... tsiklida, massivlarni qabul qilish maqsadga muvofiq emasligini unutsangiz. Ommaviy noto'g'ri aylanadigan tsiklga zid ... unda bir qator indekslar emas, balki ob'ektning ro'yxatidagi xususiyatlari emas.

Shunga qaramay, ba'zi hollarda, masalan, siyrak massivlashi kabi ... Agar quyidagi misolda ko'rsatilganidek, faqat ehtiyot choralari kuzatilsa, foydali bo'lishi mumkin:

// a - ko'tarilgan massiv var a \u003d; a \u003d "a"; a \u003d "b"; a \u003d "c"; Uchun (A van tugmachasi) (tugmacha) && / $$ | $ ^ MD * $ / tugmachalari<= 4294967294) { console.log(a); } }
Ushbu misolda tsiklning har bir iteratsiyaida ikkita tekshiruv o'tkaziladi:

  1. massivning nomi kaliti bilan o'z mulkiga egaligi (uning prototipidan meros bo'lmagan).
  2. kalit - bu 429467294 dan kam bo'lgan butun sonning o'nlik yozuvini o'z ichiga olgan satr. Oxirgi raqam qayerdan keladi? ES5-dagi qator indeks ta'rifidan kelib chiqadi, shundan keyingi eng katta indeks: (2 ^ 32 - 2) \u003d 4294967294.
Albatta, bunday tekshiruvlar tsikl bajarilsa, qo'shimcha vaqt talab etadi. Ammo kamdan-kam massivda ushbu usul tsiklga qaraganda samaraliroqdir, chunki bu holda faqat elementlar aniq belgilangan. Shunday qilib, yuqoridagi misolda atigi 3ta iteratsiyalar amalga oshiriladi (0, 10 va 10,000 indekslar uchun - tsikl uchun 10001 ga qarshi.

Har safar massivni talab qilganda bunday katta miqdordagi tekshiruv kodini yozmaslik uchun uni alohida funktsiya sifatida tartibga solish mumkin:

Funktsiya Arrayhasownindex (Caseac, tugma) (RERECAWADPROPRATERTY (tugmacha) && / \u003d Test (tugmacha) va & kalit<= 4294967294; }
Keyin misoldan tsiklning tanasi sezilarli darajada kamayadi:

Uchun (agar (massivda (A, kalit)) (konsol.log (a);))
Yuqorida muhokama qilingan audit kodi barcha holatlar uchun universal javob beradi. Ammo buning o'rniga siz rasmiy ravishda va unchalik to'g'ri emas, lekin ko'p hollarda:

Uchun (i.hasownproperti (tugmachali) && satr (Satr (Kalit, 10)) \u003d\u003d Kalit) (konsol.log (a);)))

4. ... tsikllari (iteratordan ajralmas foydalanish)

ES6, loyihaning maqomida bo'lsa-da, JavaScript-da kiritilishi kerak.

Iterator - Bu qiymatlar ketma-ketligini (cheklangan yoki cheksiz) olish uchun standart usulni belgilaydigan ob'ekt tomonidan amalga oshiriladigan protokol.
Iterator keyingi () usul aniqlangan ob'ekt - bu ob'ektni ikki xususiyatga ega bo'lgan dalillarsiz amalga oshiradigan fikrlarsiz:

  1. bajarildi (Boolean) - amalga oshirilgan ketma-ketlikning oxiriga yetganda to'g'ri keladi. Aks holda, noto'g'ri qiymatga ega.
  2. qiymat - iterator tomonidan qaytarilgan qiymatni aniqlaydi. Agar qilingan mulk to'g'ri bo'lsa, u aniqlanmasligi mumkin (yo'q).
Ko'plab o'rnatilgan ob'ektlar, shu qatorda. Ushbu massivlar, standart iteratorlarga ega. Itereratorni haqiqiy qatorlarda ishlatishning eng oddiy usuli - bu yangi ...

Uchun foydalanish misoli ...

Vali; Var A \u003d ["A", "B", "C"]; Uchun (a) (konsol.log););)
Yuqorida keltirilgan misolda, uchun ... har bir massiv qiymatini olish uchun arash ob'ekti iteratorini aniq qabul qiladi.

5. Itereratordan aniq foydalanish

ITeratorlar ham ishlatilishi mumkin va aniq, ammo bu holda kodlar ... tsiklning ... ga nisbatan kod ancha murakkablashadi. Bu quyidagicha ko'rinadi:

Var A \u003d ["A", "B", "C"]; var it \u003d a.entries (); Var kirish; Vaqt (!) (ITREC \u003d IT.Next ()). Qilingan) (konsol.valog (kirish.valuu);)
Ushbu misolda, massiv.prototip.entsries usulida massivning qiymatlarini ko'rsatish uchun ishlatiladigan iteratorni qaytaradi. Har bir iteratsiya Kirish.Value tarkibida [kalit, qiymat] formani o'z ichiga oladi.

II. Katta o'xshash narsalar

Haqiqiy massivlardan tashqari, JavaScript ham topiladi katta o'xshash narsalar . Haqiqiy massivlar bilan ularning qarindoshlari uzunlikdagi elementlarga mos keladigan raqamlar shaklida uzunligi va xususiyatlarining mulki bo'lganligi bilan bog'liq. Siz Nadelist Dom to'plam va har qanday funktsiya / usul ichida mavjud bo'lgan psevdomassiver deb atashingiz mumkin.

1. Haqiqiy massivlarni o'chirish usullaridan foydalanish

Hech bo'lmaganda, ko'p bo'lmagan ob'ektlarni sanab o'tash uchun haqiqiy massivlarni o'chirish usullari qo'llanilishi mumkin.

Uchun va ... uchun mo'ljallangan dizaynlar haqiqiy massivlar bilan bir xil tarzda qo'llanilishi mumkin.

Forgat va boshqa massivlar.pototip usullari katta ob'ektlar uchun ham qo'llaniladi. Buning uchun faylni ishlating. Film.call yoki funktsiyasidan foydalaning.

Masalan, agar siz bolagarlarning ob'ekti tugunining mulkiga sudga murojaat qilmoqchi bo'lsangiz, unda bu shunday amalga oshiriladi:

Massiv .Prototepe.Foreaec.call (tuguningiz, funktsiyasi (bola) (// ob'ektni ob'ekt bilan har qanday narsa qilish));
Ushbu ziyofatni qayta ishlatish uchun siz liniya bilan bog'lanishingiz uchun siz alohida o'zgaruvchida massivga havolani e'lon qilishingiz va uni kamaytirish sifatida ishlatishingiz mumkin:

// (Quyidagi barcha aniqlikdagi barcha kodlar bir yo'nalishda joylashgan deb taxmin qilinadi) Var Foreach \u003d Arcay.Prototype.forme; // ... for ... forvard.call (tugun tili) (// bola ob'ektlari bilan biror narsa qilish));
Agar bir qatorga o'xshash ob'ekt iterator bo'lsa, uni haqiqiy massivlar uchun xuddi shu tarzda aniq yoki aniq ishlatilishi mumkin.

2. Ushbu massivga o'tish

Qurolga o'xshash ob'ektni sanab o'tashning yana bir, juda sodda, bir usuli bor: uni haqiqiy qatorga aylantirish va yuqorida muhokama qilingan mavjud massivlar usullaridan foydalanish. Konversiya uchun siz boshqa massiv ob'ektga nisbatan qo'llanilishi mumkin bo'lgan universal massivdan foydalanishingiz mumkin. Quyidagi misolda ko'rsatilganidek juda oddiy amalga oshiriladi:

Var Truareree \u003d CASTE.PRROTEMEME.SLICE.CALL (SPAYOLOBXATI, 0);
Masalan, agar siz nodelistlar to'plamini haqiqiy qatorga o'tkazmoqchi bo'lsangiz, sizga taxminan bunday kod kerak:

Var divs \u003d massiv.potocotep.slice.call (Hujjatlar.uvansseliterall ("Div"), 0);
Yangilash.: Rok va Torbasoow sharhlarida, ES6-dagi sharhlar. Massiya o'rniga ES6-da, siz ko'proq vizual qatordan foydalanishingiz mumkin.

3. Atrof muhitidagi eslatma

Agar siz arvoza arizangizni qo'llasangiz, ko'chirish muhiti (masalan, dom to'plamlari kabi). Shuni yodda tutishingiz kerakki, ushbu usullarning to'g'ri ishlashi barcha qatllarning bajarilishi (shu jumladan brauzerlarda) kafolatlanmaydi. Bu ma'lum bir ob'ektning muayyan jismoniy mashqlardagi xatti-harakatlariga bog'liq, agar aniqroq bo'lsa, ushbu ob'ektda mavhum xasproperty operatsiyasidan qanday amalga oshiriladi. Muammo shundaki, ES5 Standartning o'zi ushbu operatsiyaga nisbatan ob'ektning noto'g'ri xatti-harakati bo'lishi mumkin (qarang §8.6.2).

Shuning uchun arizangizdan foydalanishni rejalashtirgan har bir qatnovchi muhitda (brauzer) massivining ishini sinab ko'rish juda muhimdir.

  • I. Hozirgi mashinalar miyasi
    1. Forish usuli va tegishli usullar
    2. Uchun tsikl
    3. Tsikldan to'g'ri foydalanish ... ichida
    4. Tsikl ... (Iteratordan ajralmas foydalanish)
    5. ITERERERER-dan aniq foydalanish
  • II. Katta o'xshash narsalar
    1. Haqiqiy massivlarni o'chirish usullaridan foydalanish
    2. Haqiqiy qatorga aylantirish
    3. Ob'ektlar haqida eslatma

I. Hozirgi mashinalar miyasi

Ayni paytda haqiqiy qatorning elementlarini to'xtatishning uchta usuli mavjud:

  1. massiv.potopotepe.formecial usul;
  2. klassik tsikl;
  3. "To'g'ri" Ichki tsikl ... ichida.

Bundan tashqari, yaqin orada, yangi ECMASCRIPLE 6 standart (ES 6) kelishi bilan yana ikkita usul kutilmoqda:

  1. ... tsikl ... (iteratordan ajralmas foydalanish);
  2. iteratordan aniq foydalanish.

1. Forish usuli va tegishli usullar

Agar sizning loyihangiz ECMASCRIPL-ni (ES5) standartlarini qo'llab-quvvatlash uchun yaratilgan bo'lsa, siz uning innovatsiyalaridan birini ishlatishingiz mumkin.

Foydalanish namunasi:

Var A \u003d ["A", "B", "C"]; A.Foreaecation (konsol.log (kirish);));

Umuman olganda, bu usul uchun mahalliy qo'llab-quvvatlashi bo'lmagan brauzerlar uchun Es5-Simulyatsiya kutubxonasini talab qiladi. Bularga ya'ni, ya'ni 8 va ilgari ba'zi joylarda ishlatilgan versiyalar kiradi.

Ochilishning afzalliklari mahalliy o'zgaruvchini indeksni va massivning joriy elementining qiymatini saqlash uchun e'lon qilishning hojati yo'q, chunki ular avtomatik ravishda Callback funktsiyasi (Ustunlar) orqali dalillar sifatida uzatiladi.

Agar siz har bir element uchun Kolumni chaqirishning mumkin bo'lgan narxi haqida qayg'ursangiz, tashvishlanmang va o'qimang.

oRICEACEACEACESI massivning barcha elementlaridan zavqlanish uchun mo'ljallangan, ammo ES5 barcha yoki muayyan elementlarning büstülülüğü, barcha elementlarning büstülülüğü, ularning har qanday harakatlari bilan büsting uchun yanada foydali usullarni taklif etadi:

  • har bir - Columus massivining har bir elementi uchun haqiqiy bo'lsa, haqiqiy qiymatga berilgan qiymatni qaytaradi.
  • ba'zilar - agar hech bo'lmaganda kolumus qatorining bitta elementi bo'lsa, haqiqiy qiymatga berilgan qiymatni qaytaradi.
  • filtr - Yangi qatorni, shu jumladan kolonli qatorning elementlari, u ustunlar to'g'ri qaynatilganligini yaratadi.
  • xarita - odobsiz ustunlarning qadriyatlaridan iborat yangi qatorni yaratadi.
  • birinchidan boshlab qatorning har bir elementiga o'tish uchun bir nechta qiymatni qo'llash orqali bir nechta qiymatga o'tishni kamaytiring (bu qator elementlar miqdorini va boshqa natijalar miqdorini hisoblash uchun foydali bo'lishi mumkin).
  • reduseright - shunga o'xshash tarzda ishlaydi, ammo buyumlarni teskari tartibda harakatlantiradi.

2. uchun tsikl

Boshqaruv uchun yaxshi eski:

Var A \u003d ["A", "B", "C"]; Var indeks; Uchun (indeks \u003d 0; indeks)< a.length; ++index) { console.log(a); }

Agar qatorning uzunligi butun tsikl davomida o'zgarmasa va tsikl Kod unumdorligini (ehtimol emas) bir qatorda "eng maqbul" versiyasidan foydalanishingiz mumkin:

Var A \u003d ["A", "B", "C"]; Var indeks, len; uchun (indeks \u003d 0, len \u003d a.sength; indeks< len; ++index) { console.log(a); }

Nazariy jihatdan ushbu kod avvalgisidan biroz tezroq amalga oshirilishi kerak.

Agar elementlarni olib tashlash tartibi muhim bo'lmasa, unda siz optimallashtirish nuqtai nazaridan yanada optimallashtirish va o'zgaruvchidan teskari tomonga almashish uchun massivdan xalos bo'lishingiz mumkin:

Var A \u003d ["A", "B", "C"]; Var indeks; uchun (indeks \u003d a.lengt - 1; indeks\u003e \u003d 0;-konsol.log (a););)

Biroq, zamonaviy JavaScript dvigatellarida optimlashtirish bilan bunday o'yinlar odatda hech narsani anglatmaydi.

3. Tsikldan ... ichida

Agar siz ... tsiklida ... tsiklida, massivlarni qabul qilish maqsadga muvofiq emasligini unutsangiz. Ommaviy noto'g'ri aylanadigan tsiklga zid ... unda bir qator indekslar emas, balki ob'ektning ro'yxatidagi xususiyatlari emas.

Shunga qaramay, ba'zi hollarda, masalan, siyrak massivlashi kabi ... Agar quyidagi misolda ko'rsatilganidek, faqat ehtiyot choralari kuzatilsa, foydali bo'lishi mumkin:

// a - ko'tarilgan massiv var a \u003d; a \u003d "a"; a \u003d "b"; a \u003d "c"; Uchun (A van tugmachasi) (agar (tugmacha) && / $$$$$ /. Sinov (tugmacha) va & kaliti<= 4294967294) { console.log(a); } }

Ushbu misolda tsiklning har bir iteratsiyaida ikkita tekshiruv o'tkaziladi:

  1. massivning nomi kaliti bilan o'z mulkiga egaligi (uning prototipidan meros bo'lmagan).
  2. kalit - bu 429467294 dan kam bo'lgan butun sonning o'nlik yozuvini o'z ichiga olgan satr. Oxirgi raqam qayerdan keladi? ES5-dagi qator indeks ta'rifidan kelib chiqadi, shundan keyingi eng katta indeks: (2 ^ 32 - 2) \u003d 4294967294.

Albatta, bunday tekshiruvlar tsikl bajarilsa, qo'shimcha vaqt talab etadi. Ammo kamdan-kam massivda ushbu usul tsiklga qaraganda samaraliroqdir, chunki bu holda faqat elementlar aniq belgilangan. Shunday qilib, yuqoridagi misolda atigi 3ta iteratsiyalar amalga oshiriladi (0, 10 va 10,000 indekslar uchun - tsikl uchun 10001 ga qarshi.

Har safar massivni talab qilganda bunday katta miqdordagi tekshiruv kodini yozmaslik uchun uni alohida funktsiya sifatida tartibga solish mumkin:

Funktsiya Arrayhasownindex (Case, tugma) (Qaytish massiv) && / / /0$| &.Test -.keyi (tugmacha) funktsiyasi) && kalit<= 4294967294; }

Keyin misoldan tsiklning tanasi sezilarli darajada kamayadi:

Uchun (agar (massivda (A, kalit)) (konsol.log (a);))

Yuqorida muhokama qilingan audit kodi barcha holatlar uchun universal javob beradi. Ammo buning o'rniga siz rasmiy ravishda va unchalik to'g'ri emas, lekin ko'p hollarda:

Uchun (i.hasownproperti (tugmachali) && satr (Satr (Kalit, 10)) \u003d\u003d Kalit) (konsol.log (a);)))

4. ... tsikllari (iteratordan ajralmas foydalanish)

ES6, loyihaning maqomida bo'lsa-da, JavaScript-da kiritilishi kerak.

Iterator - Bu qiymatlar ketma-ketligini (cheklangan yoki cheksiz) olish uchun standart usulni belgilaydigan ob'ekt tomonidan amalga oshiriladigan protokol.
Ob'ektga iterator mavjud bo'lsa, agar u keyingi () usulini belgilasa - funktsiyani ikki xususiyatga ega bo'lgan fikrlarni qaytaradigan dalillarsiz:

  1. bajarildi (Boolean) - amalga oshirilgan ketma-ketlikning oxiriga yetganda to'g'ri keladi. Aks holda, noto'g'ri qiymatga ega.
  2. qiymat - iterator tomonidan qaytarilgan qiymatni aniqlaydi. Agar qilingan mulk to'g'ri bo'lsa, u aniqlanmasligi mumkin (yo'q).

Ko'plab o'rnatilgan ob'ektlar, shu qatorda. Ushbu massivlar, standart iteratorlarga ega. Itereratorni haqiqiy qatorlarda ishlatishning eng oddiy usuli - bu yangi ...

Uchun foydalanish misoli ...

Vali; Var A \u003d ["A", "B", "C"]; Uchun (a) (konsol.log););)

Yuqorida keltirilgan misolda, uchun ... har bir massiv qiymatini olish uchun arash ob'ekti iteratorini aniq qabul qiladi.

5. Itereratordan aniq foydalanish

ITeratorlar ham ishlatilishi mumkin va aniq, ammo bu holda kodlar ... tsiklning ... ga nisbatan kod ancha murakkablashadi. Bu quyidagicha ko'rinadi:

Var A \u003d ["A", "B", "C"]; Var kirish; Vaqt (!). Qilingan). Qilingan) (konsol.valog (kirish.value););)

II. Katta o'xshash narsalar

Haqiqiy massivlardan tashqari, JavaScript ham topiladi katta o'xshash narsalar . Haqiqiy massivlar bilan ularning qarindoshlari uzunlikdagi elementlarga mos keladigan raqamlar shaklida uzunligi va xususiyatlarining mulki bo'lganligi bilan bog'liq. Siz Nadelist Dom to'plam va har qanday funktsiya / usul ichida mavjud bo'lgan psevdomassiver deb atashingiz mumkin.

1. Haqiqiy massivlarni o'chirish usullaridan foydalanish

Hech bo'lmaganda, ko'p bo'lmagan ob'ektlarni sanab o'tash uchun haqiqiy massivlarni o'chirish usullari qo'llanilishi mumkin.

Uchun va ... uchun mo'ljallangan dizaynlar haqiqiy massivlar bilan bir xil tarzda qo'llanilishi mumkin.

forgat va boshqa massivlar.pototip usullari katta ob'ektlar uchun ham qo'llaniladi. Buning uchun faylni ishlating. Film.call yoki funktsiyasidan foydalaning.

Masalan, agar siz bolagarlarning ob'ekti tugunining mulkiga sudga murojaat qilmoqchi bo'lsangiz, unda bu shunday amalga oshiriladi:

Massiv .Prototepe.Foreaec.call (tuguningiz, funktsiyasi (bola) (// ob'ektni ob'ekt bilan har qanday narsa qilish));

Ushbu ziyofatni qayta ishlatish uchun siz liniya bilan bog'lanishingiz uchun siz alohida o'zgaruvchida massivga havolani e'lon qilishingiz va uni kamaytirish sifatida ishlatishingiz mumkin:

// (Quyidagi barcha aniqlikdagi barcha kodlar bir yo'nalishda joylashgan deb taxmin qilinadi) Var Foreach \u003d Arcay.Prototype.forme; // ... for ... forvard.call (tugun tili) (// bola ob'ektlari bilan biror narsa qilish));

Agar bir qatorga o'xshash ob'ekt iterator bo'lsa, uni haqiqiy massivlar uchun xuddi shu tarzda aniq yoki aniq ishlatilishi mumkin.

2. Ushbu massivga o'tish

Qurolga o'xshash ob'ektni sanab o'tashning yana bir, juda sodda, bir usuli bor: uni haqiqiy qatorga aylantirish va yuqorida muhokama qilingan mavjud massivlar usullaridan foydalanish. Konversiya uchun siz boshqa massiv ob'ektga nisbatan qo'llanilishi mumkin bo'lgan universal massivdan foydalanishingiz mumkin. Quyidagi misolda ko'rsatilganidek juda oddiy amalga oshiriladi:

Var Truareree \u003d CASTE.PRROTEMEME.SLICE.CALL (SPAYOLOBXATI, 0);

Masalan, agar siz nodelistlar to'plamini haqiqiy qatorga o'tkazmoqchi bo'lsangiz, sizga taxminan bunday kod kerak:

Var divs \u003d massiv.potocotep.slice.call (Hujjatlar.uvansseliterall ("Div"), 0);

3. Atrof muhitidagi eslatma

Agar siz arvoza arizangizni qo'llasangiz, ko'chirish muhiti (masalan, dom to'plamlari kabi). Shuni yodda tutishingiz kerakki, ushbu usullarning to'g'ri ishlashi barcha qatllarning bajarilishi (shu jumladan brauzerlarda) kafolatlanmaydi. Bu ma'lum bir ob'ektning muayyan jismoniy mashqlardagi xatti-harakatlariga bog'liq, agar aniqroq bo'lsa, ushbu ob'ektda mavhum xasproperty operatsiyasidan qanday amalga oshiriladi. Muammo shundaki, ES5 Standartning o'zi ushbu operatsiyaga nisbatan ob'ektning noto'g'ri xatti-harakati bo'lishi mumkin (qarang §8.6.2).

Shuning uchun arizangizdan foydalanishni rejalashtirgan har bir qatnovchi muhitda (brauzer) massivining ishini sinab ko'rish juda muhimdir.

Ta'rif va dastur

JavaScript usuli har biriga () Massivdagi indeks bo'yicha belgilangan tartibda qatordagi har bir element uchun uzatiladigan funktsiyani bajarishga imkon beradi.

Iltimos, Callback funktsiyasi usul parametr sifatida o'tganligini unutmang har biriga () Bu masofadan turib yoki o'tkazib yuborilgan qator elementlarga sabab bo'lmaydi.

Usuldan foydalanib ishlov berilgan elementlar oralig'i har biriga () Oldin o'rnatildi avval Qayta qo'ng'iroq funktsiyasini chaqiring. Agar u qo'ng'iroqdan keyin bir qatorga qo'shilgan bo'lsa, unda bunday elementlarga funktsiya chaqirilmaydi.

Agar amalda mavjud bo'lgan massivlar elementlarining qiymatlari o'zgartirilsa, uzatiladigan funktsiya sifatida uzatiladigan funktsiyalar usuli paytida qiymat bo'ladi har biriga () ularga tashrif buyuradi. Agar narsalar tashrifidan oldin olib tashlansa, bunday elementlarga tashrif buyurilmaydi. Agar allaqachon tashrif buyurgan narsalar massivda qatorda olib tashlansa, keyin keyinchalik jo'natiladi.

Qo'llab-quvvatlash brauzerlari

Usul
Opera.

IExplorer.

Chekka.
har biriga () HaHaHaHa9.0 Ha

JavaScript sintaksissi:

// faqat qo'ng'iroq qilish xususiyati bilan massiv..Forifice (funktsiya) ushbu taraqqiyot., indeks, bRON.)); // kalit so'zga murojaat qilishi mumkin bo'lgan ob'ektdan foydalanish massiv..Forifice (funktsiya) ushbu taraqqiyot., indeks, bRON.), buvalın.);

JavaScript versiyasi

Eciscript 5.1 (JavaScript 1.6-da amalga oshirildi)

Parametr qiymatlari

ParametrTavsif
funktsiya. Qo'ng'iroqlar nuqtasi bajariladi biri Bir marta massivdagi har bir element uchun. Funktsiya quyidagi parametrlarni oladi:
  • ushbu taraqqiyot. - joriy elementning qiymati
  • indeks - joriy element qatorining indeksi.
  • bRON. - joriy element tegishli bo'lgan massiv (o'tish joyiga qarab).

Agar biror narsa yuqsa, funktsiya ob'ekti emas, bu funktsiya ob'ekti emas, bundan mustasno. Tipik.. Majburiy parametr.

buvalın. Callback funktsiyasida ushbu kalit so'zga murojaat qiladigan ob'ekt. Agar parametr bo'lsa buvalın. Foydalanilmaydi, keyinchalik bu qiymat aniqlanmaganidek ishlatiladi (oxir-oqibat bu funktsiya kontekstining odatiy qoidalariga bog'liq). Ixtiyoriy parametr.

Foydalanish namunasi

Keyingi misolda, biz massivning barcha elementlarining miqdorini qanday olishni ko'rib chiqamiz JavaScript. usul har biriga ():

Var Arra \u003d; Var Sum \u003d 0; // raqamli qiymatni o'z ichiga olgan o'zgaruvchini ishga tushiring massiv..Har biriga ( // Array massivining barcha elementlarini tomosha qiling Funktsiya sarlavhasi ( ushbu taraqqiyot.) { sum. += ushbu taraqqiyot.; )))); Konsol .Bog ( sum.); // 50 ga teng bo'lgan summaning qiymatini ko'rsating

Keyingi misolda biz foydalanishni ko'rib chiqamiz ikkinchi argument usuli har biriga ()Ushbu kalit so'zni Callback funktsiyasida ishlatadigan ob'ektni ko'rsatadigan ob'ektni ko'rsatadi:

Var raqamlar \u003d; // raqamli qiymatlarni o'z ichiga olgan o'zgaruvchini ishga tushiring Var kvadrat \u003d; // bo'sh massivni o'z ichiga olgan o'zgaruvchini ishga tushiring Var MyObjece \u003d ( // ob'ektni o'z ichiga olgan o'zgaruvchini ishga tushiring Kvadrat: funktsiyasi ( ushbu taraqqiyot.) { // qiymatni oladigan ob'ekt usuli Qaytish. ushbu taraqqiyot. * ushbu taraqqiyot.; // uni kvadratga qaytaradi } } ; raqamlar..Har biriga ( // Raqamlar qatoridagi barcha elementlarni tomosha qiling Funktsiya ( ushbu taraqqiyot.) { kvadrat..push (bu .Square ( ushbu taraqqiyot.)); // myobject ob'ektining kvadrat usulining kvadrat tezligi qiymatiga qo'shing } , myobject. // biz kalit so'zni ishlatadigan ob'ekt); Konsol .Bog ( kvadrat.); // kvadrat o'zgaruvchi qiymatining qiymatini ko'rsatadi;

Hozircha meni olib tashladi JavaScript Acctivit massivini yarating. Ajablanarib, u ilgari hech qachon kerak emas edi JavaScript.. Men Internetda qidirishga ham o'tdim, buni qanday qilish kerak. Va juda ko'p odamlar imkonsiz deb yozgani juda hayron bo'ldi JavaScript. u yoq. Yaxshiyamki, mening ko'p yillik tajribam menga bema'nilik olib borishni taklif qildi. Shuning uchun, oxirida men bilib oldim javaScript-da askariatli qatorni yaratishUshbu maqolada nima va sizga ayting.

Kod quyida yozilgan assotsiatsion massivlar yaratildiKeyin yana bir element qo'shildi va nihoyat, qator tsikl orqali o'tadi:

Ushbu maqolada biz ko'rib chiqdik assotsiativ massivlar yaratish, ularning o'zgarishi, shuningdek tsikl orqali to'liq büst uchun. Shaxsan men ishlatganman javaScript-ga biriktirilgan massivlar Faqat bir kun, lekin bunday imkoniyat haqida bilish kerak.

Biz misollarda har bir kutubxonaning funktsiyasi va usulidan foydalanish bo'yicha ko'rib chiqadigan maqola.

JQuery kutubxonasida har biri nomli 2 xil korxona mavjud.

Birinchi (JQuery.aytae) - bu massiv yoki ob'ekt elementlarining shafqatsiz kuchini tuzishingiz mumkin bo'lgan universal jquery funktsiyasi.

Ikkinchi (har biri) - bu elementlar to'plamiga tegishli bo'lgan usullar to'plamiga tegishli.

Har bir (jQuere.eae`z) tsikl. Foydalanishga misollar

Sintaksisning har biri:

// massivlash yoki ob'ekt - bir qator yoki ob'ektlar, elementlar yoki xususiyatlar ajratish kerak // Har bir massiv mulkingiz yoki ob'ekt mulklari uchun bajariladigan funktsiya. .Ik (massiv yoki ob'ekt, qo'ng'iroqlar);

Har bir funktsiya bilan ishlash, misollarga qarang.

1-misol 1. U massivning barcha elementlarining (massiv) perpetorenti tomonidan amalga oshiriladi.

// massiv 3 satrdan iborat: ["CAR", "Yuk mashinasi", "avtobus"]; // $ 1. Acr (ACT, Funktsiya (indeks, funktsiya) (// Har bir element uchun bajariladigan harakatlar) massiv elementi (raqami) ning joriy indeksi (raqam) Qiymat massivning joriy elementining qiymati // indeksining qiymati va konsolning indeksining qiymati va massivning qiymatini olib tashlang ("Indeks:" + indeks + "; / * Natijada (konsolda): indeksi: 0; Qiymat: Avtomobil indeksi: 1; Qiymati: Yuk mashinasi indeksi: 2; Qiymati: avtobus * /

Yuqoridagi kodda har bir funktsiya qatorni sanab o'tish uchun ishlatiladi. Funktsiya mavjud 2 Majburiy parametrlar. Birinchi parametr - bu mohiyat (massiv yoki ob'ekt), ularning elementlari (xususiyatlari) saralanishi kerak. Bunday holda, bu arrow maskani anglatadi. Ikkinchi parametr - bu Callback funktsiyasi, bu har bir element uchun (bu holatda) massivlar uchun amalga oshiriladi. Uning ichida tegishli o'zgaruvchilar tomonidan mavjud bo'lgan 2 parametr mavjud. Birinchi parametr elementning ketma-ketligi (hisoblash 0 dan). Ikkinchi parametr massivning joriy elementining qiymati.

2-misol. Ushbu misolda biz ob'ektning barcha xususiyatlari mavjudmiz.


// 5 ta smartfonga ega bo'lgan smartfon ob'ektlari \u003d ("Ism" xususiyatlari: "Yil", "Ekran o'lchamlari", "Ekran o'lchamlari", "Ekran o'lchamlari", "Ekran o'lchamlari". , "OS": "Android 6.0 (marshmallow)); // Smartfonentiga nisbatan sizdan keyin (smartfon, funktsiya) (// funksiyasi) (//) massivlar uchun bajariladigan harakatlar // massivning hozirgi xususiyatlari - Mavjud ob'ektning qiymati // Mulk nomi va uning qiymatini konsolning nomi va uning qiymatini konsol ("Mulk:" + kalit + ";" + hisobi + ";););); / * Natija (konsolda): mulk: nomi; Qiymati: LG G5 SE Mulk; yil; Qiymati: 2016 Mulk: Ekran o'lchamlari; Qiymati: 5.3 Mulk: Ekran qarori; Qiymati: 2560 x 1440 Mulk: OS; Ma'nosi: Android 6.0 (marshmallow) * /

Har bir funktsiyada JavaScript ob'ektlari uchun ishlatilishi mumkin. O'zidan foydalanish o'rtasidagi farq faqat qo'ng'iroqni qaytarish funktsiyasi parametrlari boshqa qiymatlarga ega ekanligi. Birinchi parametr ob'ekt xususiyatlarining nomini saqlaydi va ikkinchisi esa ushbu mulkning qiymati.

3-misol. Unda biz yanada murakkab tuzilmani olamiz (har bir qatni qanday ishlatishni ko'rib chiqing).

// 2 xususiyatdan iborat ob'ekt. Ushbu ob'ektning har bir mulki qiymati sifatida qatorga ega, ularning elementlari ham mavjud, ularning elementlari ham mavjud: ("boottrap": "" 1 "," Sarlavha "), (" ID ") : "2", "Sarlavha": "Qanday qilib sozlash kerak"), ("ID", "Sarlavhalar", "Sarlavhasi")]] "JavaScript": "4": "4" "," sarlavhasi ":" Asosiy "), (" ID ":" 5 "," Sarlavha ":" Element namunasi ")])]; $ .Itae (konsol.log ("bo'lim:" + tugmachalar); $.. $ (Indeks. funktsiyasi) ("Maqola: ID \u003d qiymat [ID"] + "+ '+ qiymat ["sarlavha"]));)); / * Natija: Bo'tottrap maqolasi: ID \u003d 1; Nom \u003d Kirish maqolasi: ID \u003d 2; Sarlavha \u003d Qanday qilib maqolani o'rnatish kerak: ID \u003d 3; Ism \u003d Torlash bo'lim: JavaScript maqolasi: ID \u003d 4; Ism \u003d Asosics Maqola: ID \u003d 5; Ism \u003d Elementlarni tanlab olish * /

Qanday qilib har birini qanday to'xtata olasiz (tsikldan chiqadi)?

Har bir tsiklning xujumi (tanaffuslari) qaytarilgan bayonotdan foydalangan holda amalga oshiriladi, bu noto'g'ri qiymatni qaytarishi kerak.

Masalan, har bir tsiklning 7-sonini topgandan so'ng, massivda:

// 5 ta raqamdan iborat qatorlar \u003d; // siz topmoqchi bo'lgan raqam \u003d 7; // $ 1. Acr (indeks, funktsiya) (// Agar (/\u003d\u003d\u003d /\u003e Topilgan bo'lsa) (// Agar (//ce \u003d\u003d\u003d / topilsa). ("Hurray!" + FACT + "topildi! Bu raqam indeksga ega:" + indeks "; // Qaytish noto'g'ri sikliligini buzish; boshqa konsolning hozirgi sonini aks ettirish Konsol ("Hozirgi raqam:" + qiymat yoki "; / * Natija (konsolda): Hozirgi raqam: 5 Hozirgi raqam: 4 Hooray! 7 raqami topildi! Bu raqam indekslarga ega: 2 * /

Keyingi iteratsiyaga qanday borish kerak (har biri davom etmoqda)?

Har birida, joriy amalga oshiriladigan amalga oshirish va keyingisiga o'tish qaytish bayonnomasi yordamida amalga oshiriladi, ular noto'g'ri qiymatdan boshqa qiymatga ega bo'lishi kerak.

// Var Bet \u003d raqamlaridan iborat qator; // Arranma massivining barcha elementlarini o'z ichiga olishi kerak bo'lgan massivlar, Var Newarr \u003d; // arrow arrow arrow. (ACT, Funktsiya (indeks, funktsiya) (// Agar% qiymat qiymati \u003d\u003d\u003d 0) (//) (//) ni sog'inasiz Keyingi qaytish uchun mashina va mash bilan;) NaRarr lug'ati Newarr lug'ati Nuarr -p.push (qiymat);)););); Konsol.log ("Manba massi" (CRAE): "+ BR.JOIN ()); Konsol.log ("Natijada massivlar (Newarr):" + Newarr.Join ()); / * Natija (konsolda): Manba massi (Arm): 3,5,4,19,19,19,19,19,19,19,19,19,19,19.35 * /

Joriy elementlarni büsting (.Ik)

Har bir usul sintaksis (faqat tanlangan elementlarga):


.Icha (funktsiya); // funktsiyasi - joriy ob'ektning har bir element uchun bajariladigan funktsiya

Biz qanday usul quyidagi misolda qanday ishlaydi (Div elementlarni kamaytirishi bilan):


Yuqorida keltirilgan misolda har bir usul joriy to'plamni ishlatadi ($ selektor ("Div" tomonidan tanlangan elementlar. Har bir usul ishlov beruvchisi sifatida funktsiya har doim amalga oshiriladi, bu esa joriy terishning har bir elementi uchun (bu holatda har bir bo'lim uchun) bajariladi. Ushbu funktsiyada 2 ta ixtiyoriy parametr mavjud. Ulardan biri (indeks) - joriy amalga oshiriladigan ko'chatlar sonini va ikkinchi (element) - hozirgi elementga havola. Bundan tashqari, ushbu kalit so'z mavjud, shuningdek, ikkinchi parametr mavjud elementga dom havolasi mavjud.

Masalan, barcha buyumlar va sahifada HREF atributini konsolga olib chiqing.

$ ("A"). Har bir (funktsiya (($ (bu) .attr ("HREF"))));

$ ("A"). Har bir (funktsiya (funktsiya) (bu) .attr ("HREF"); agar ("HREDEXOX") \u003d\u003d 0) ||) .Indexof ("https: //") \u003d\u003d 0)) (konsol.log ("HREF AYoTLARI \u003d" Link);) // Quyidagi havolalar Sahifada joylashgan bo'lsa: // Yandex // JavaScript qanday ishlaydi? // dotstrap // Keyin konsolda biz quyidagi natijalarni ko'ramiz: // https://www.yandex.ru/ // http:/ http:/ httgbootstrap.com/

Masalan, ismning nomiga ega bo'lgan dom elementlardagi har bir tsiklni qanday tashkil etishni ko'rib chiqing (bir xil sinfning barcha elementlarini harakatlantirish orqali).

Raspberry pi
bir tomonlama hisob-kitob qilish
Intel Galiley Gen2.
19$
Pine A64 plyus.

Masalan, biz sahifada barcha narsalar orqali qanday o'tishni tahlil qilamiz.

Masalan, sahifada barcha kiritish elementlarining qiymatini oling.

$ ("Kirish"). Har biri ($ ((bu) .Bal ());));

Masalan, ul ichidagi barcha elementlarni ID \u003d "mylist" (har bir bola) ko'chirish orqali.

  • Html
  • JavaScript.

Har bir usulni tanlagan oxirgi indeksni (elementni) belgilashingiz mumkin bo'lgan usulni ko'rib chiqing.

// Elementlarni tanlang var my ro'yxat \u003d $ ("ul li"); // namunadagi elementning sonini aniqlang \u003d mellist.'lon. // Biz tanlangan mylist.elay elementlarini olib boramiz (funktsiya (indeks (indeks (indeks) (/ yoki umumiy - 1) (// bu namunadagi oxirgi element)))));