اینترنت پنجره ها اندروید

foreach JS برای آرایه ها و مجموعه ها. تمام روش های آرایه خاموش در جاوا اسکریپت

  • I. مغز ماشین های حاضر
    1. روش foreach و روش های مرتبط
    2. چرخه برای
    3. استفاده مناسب از چرخه ... در
    4. چرخه برای ... (استفاده ضمنی از تکرار)
    5. استفاده صریح از تکرار
    1. استفاده از روش ها برای خاموش کردن آرایه های واقعی
    2. تبدیل به یک آرایه واقعی
    3. توجه داشته باشید بر روی اشیاء

I. مغز ماشین های حاضر

در حال حاضر سه راه برای تعویض عناصر آرایه واقعی وجود دارد:
  1. array.Prototype.Foreach روش؛
  2. چرخه کلاسیک برای؛
  3. "راست" چرخه ساخته شده برای ... در.
علاوه بر این، به زودی، با ظهور استاندارد ECMAScript 6 استاندارد (ES 6)، دو روش دیگر انتظار می رود:
  1. چرخه برای ... (استفاده ضمنی از تکرار)؛
  2. استفاده صریح از تکرار.

1. روش foreach و روش های مرتبط

اگر پروژه شما برای پشتیبانی از استانداردهای ECMAScript 5 (ES5) طراحی شده باشد، می توانید از یکی از نوآوری های آن استفاده کنید - روش foreach.

مثال استفاده:
var a \u003d ["a"، "b"، "c"]؛ a.foreach (console.log (ورود)؛))؛
به طور کلی، استفاده از foreach نیاز به یک کتابخانه شبیه سازی ES5-SHIM برای مرورگرهای است که پشتیبانی مادری برای این روش ندارند. این شامل IE 8 و نسخه های قبلی است که هنوز در برخی از نقاط استفاده می شود.

مزایای futeach متعلق به آن نیست که نیازی به اعلام متغیرهای محلی برای ذخیره شاخص و ارزش عنصر فعلی آرایه نیست، زیرا آنها به صورت خودکار به تابع فراخوانی (ستون) به عنوان استدلال انتقال می یابند.

اگر شما در مورد هزینه های احتمالی Columus برای هر عنصر نگران هستید، نگران نباشید و آن را بخوانید.

foreach طراحی شده است تا از تمام عناصر آرایه لذت ببرد، اما علاوه بر این، ES5 چندین روش مفید برای جابجایی تمام عناصر یا عناصر خاصی را به همراه انجام می دهد با هر گونه اقداماتی با آنها ارائه می دهد:

  • هر - باز می گردد اگر برای هر عنصر آرایه Columus مقدار ارزش داده شده به درست را بازگرداند.
  • برخی - درست می شود، اگر حداقل برای یک عنصر از آرایه Columus، مقدار داده شده به درست را بازگرداند.
  • filter - یک آرایه جدید ایجاد می کند، از جمله عناصر آرایه منبع که ستون ها درست می شوند.
  • نقشه - یک آرایه جدید را تشکیل می دهد که شامل مقادیر ستون های ناخوشایند است.
  • کاهش - یک آرایه را به یک مقدار واحد با استفاده از Colums به هر عنصر آرایه کاهش می دهد، از ابتدا شروع می شود (می تواند برای محاسبه مقدار عناصر آرایه و سایر توابع نتیجه مفید باشد).
  • defasteright - به طور مشابه برای کاهش کار می کند، اما موارد را در جهت معکوس حرکت می دهد.

2. چرخه برای

خوب قدیمی برای فرمان:

var a \u003d ["a"، "b"، "c"]؛ شاخص VAR؛ برای (index \u003d 0؛ شاخص< a.length; ++index) { console.log(a); }
اگر طول آرایه در طول کل چرخه تغییر نام داده شود، و چرخه خود متعلق به بهره وری کد (بعید است)، شما می توانید نسخه "بهینه تر" را برای ذخیره سازی طول آرایه استفاده کنید:

var a \u003d ["a"، "b"، "c"]؛ شاخص Var، Len؛ برای (index \u003d 0، len \u003d a.length؛ شاخص< len; ++index) { console.log(a); }
از لحاظ نظری، این کد باید کمی سریعتر از قبل انجام شود.

اگر روش برای سوراخ عناصر مهم نیست، شما می توانید حتی بیشتر از لحاظ بهینه سازی بروید و از متغیر برای ذخیره طول آرایه با تغییر روش معکوس خلاص شوید.

var a \u003d ["a"، "b"، "c"]؛ شاخص VAR؛ برای (index \u003d a.length - 1؛ index\u003e \u003d 0؛ --index) (console.log (a)؛)
با این حال، در موتورهای جاوا اسکریپت مدرن چنین بازی هایی با بهینه سازی معمولا به معنای چیزی نیست.

3. استفاده مناسب از چرخه ... در

اگر شما به شما توصیه می کنید از ... در چرخه استفاده کنید، به یاد داشته باشید که شمارش آرایه ها چیزی نیست که برای آنچه که در نظر گرفته شده است. بر خلاف چرخه غلط غلط مشترک برای ... در آن، شاخص های آرایه ای نیست، بلکه خواص ذکر شده از جسم است.

با این وجود، در بعضی موارد، مانند آرایه های پراکندهای پراکنده، برای ... ممکن است مفید باشد، اگر تنها اقدامات احتیاطی به عنوان مثال در مثال زیر نشان داده شود:

// a - آرایه مطرح شده var a \u003d؛ a \u003d "a"؛ a \u003d "b"؛ a \u003d "c"؛ برای (var key در a) (اگر (a.hasownproperty (کلید) && / \u003d $$ | ^ md * $ /. تست (کلید) && کلید<= 4294967294) { console.log(a); } }
در این مثال، دو چک بر روی هر تکرار چرخه انجام می شود:

  1. این واقعیت که آرایه دارایی خود را با کلید نام دارد (از نمونه اولیه آن به ارث برده نمی شود).
  2. واقعیت این است که کلید یک رشته حاوی یک رکورد دهدهی یک عدد صحیح است که ارزش آن کمتر از 4294967294 است. آخرین شماره آخر کجاست؟ از تعریف یک شاخص آرایه در ES5، که از آن به این معنی است که بزرگترین شاخص که می تواند یک عنصر در آرایه داشته باشد: (2 ^ 32 - 2) \u003d 4294967294.
البته، زمانی که چرخه اجرا می شود، چنین چک هایی طول می کشد. اما در مورد یک آرایه Rarefied، این روش کارآمدتر از چرخه است، زیرا در این مورد تنها این عناصر به وضوح در آرایه تعریف شده است. بنابراین، در مثال بالا، تنها 3 تکرار انجام می شود (برای شاخص های 0، 10 و 10،000) - در برابر 10001 در چرخه.

به منظور نوشتن چنین کد چک بزرگ در هر زمانی که Massif مورد نیاز است، می توانید آن را به عنوان یک تابع جداگانه ترتیب دهید:

تابع arrayhasownindex (آرایه، کلید) (بازگشت array.HasownProperty (کلید) && / \u003d نوع $ | ^ MD * $ /. تست (کلید) && کلید<= 4294967294; }
سپس بدن چرخه از مثال به طور قابل توجهی کاهش خواهد یافت:

برای (اگر (arraysownindex (a، key)) (console.log (a)؛))
کد حسابرسی مورد بحث در بالا، جهانی مناسب برای همه موارد است. اما در عوض شما می توانید از یک نسخه کوتاهتر استفاده کنید، اگر چه به طور رسمی و نه کاملا صحیح، اما، با این حال، مناسب برای اکثر موارد:

برای (I.HasownProperty (کلید) && رشته (Parseint (کلید، 10)) \u003d\u003d\u003d کلید) (console.log (a)؛))

4. چرخه برای ... از (استفاده ضمنی از تکرار)

ES6، در حالی که هنوز در وضعیت پیش نویس قرار دارد، باید iTerators را در جاوا اسکریپت وارد کنید.

اشاره گر - این یک پروتکل است که توسط یک شیء اجرا می شود که روش استاندارد را برای به دست آوردن توالی مقادیر (محدود یا بی نهایت) تعیین می کند.
iTerator یک شی است که در آن روش بعدی () تعریف شده است - یک تابع بدون استدلال که یک شی را با دو ویژگی باز می گرداند:

  1. انجام شده (Boolean) - اگر تکرار کننده به انتهای دنباله نتیجه رسید، درست انجام شود. در غیر این صورت، دارای ارزش نادرست است.
  2. ارزش - تعیین مقدار بازگشتی توسط تکرار را تعیین می کند. اگر اموال انجام شده درست باشد، ممکن است تعریف نشده باشد (وجود ندارد).
بسیاری از اشیاء داخلی، شامل این آرایه ها دارای تکرار پیش فرض هستند. ساده ترین راه استفاده از تکرار کننده در آرایه های واقعی این است که از یک جدید برای ... استفاده کنید.

یک مثال از استفاده برای ... از:

var val؛ var a \u003d ["a"، "b"، "c"]؛ برای (val of a) (console.log (val)؛)
در مثال بالا، برای ... به طور ضمنی، یک تکرار شیء آرایه را برای به دست آوردن هر مقدار آرایه به دست می آورد.

5. استفاده صریح از تکرار

ایترکنندگان نیز می توانند مورد استفاده قرار گیرند و به صراحت، با این حال، در این مورد، کد بسیار پیچیده تر می شود، در مقایسه با ... چرخه. به نظر می رسد این است:

var a \u003d ["a"، "b"، "c"]؛ var it \u003d a.entries ()؛ ورودی var در حالی که (! (ورود \u003d it.next ()). انجام شده) (console.log (ورود به ارزش)؛)
در این مثال، روش Array.ProtypeypeIpe.entries یک تکرار کننده را باز می کند که برای نمایش مقادیر آرایه استفاده می شود. هر ورودی ITRATION.VALUE شامل یک آرایه از فرم [کلید، ارزش] است.

دوم جابجایی از اشیاء گسترده مانند

علاوه بر آرایه های واقعی، جاوا اسکریپت نیز یافت می شود اشیاء گسترده مانند . با آرایه های واقعی، بستگان آنها مربوط به این واقعیت است که آنها دارایی طول و خواص با نام ها در قالب اعداد مربوط به عناصر آرایه است. شما می توانید مجموعه DODELIST DOM و استدلال های pseudomassive را در داخل هر تابع / روش تماس بگیرید.

1. استفاده از راه های خاموش کردن آرایه های واقعی

حداقل، اگر نه همه، روش های خاموش کردن آرایه های واقعی را می توان برای شمارش اشیاء گسترده مانند استفاده کرد.

طرح ها برای و برای ... می تواند به طور گسترده ای مانند اشیاء دقیقا همان شیوه ای را به آرایه های واقعی اعمال کند.

فراموشی و سایر آرایه ها. روش های پوتوتایپ نیز برای اشیاء عظیم قابل استفاده هستند. برای انجام این کار، از File.Call یا Function.Pply تماس بگیرید.

به عنوان مثال، اگر شما می خواهید برای درخواست به مالکیت گره شیء Childnodes اعمال کنید، این کار را انجام می دهد:

Array.Prototype.foreach.call (node.childnodes، تابع (کودک) (// هر چیزی را با کودک شی))؛
برای سهولت استفاده مجدد از این پذیرش، می توانید یک پیوند را به روش Array.Prototype.Foreach در یک متغیر جداگانه اعلام کنید و از آن به عنوان کاهش استفاده کنید:

// فرض بر این است که تمام کد زیر در یک منطقه از دید قرار دارد) var foreach \u003d array.prototype.foreach؛ // ... foreach.call (node.childnodes، تابع (کودک) (/ / چیزی را با شی کودک ایجاد کنید))؛
اگر یک شیء آرایه یک تکرار کننده باشد، می توان آن را به صراحت یا به طور ضمنی برای یکپارچگی جسم به همان شیوه ای که برای آرایه های واقعی استفاده می شود، مورد استفاده قرار گیرد.

2. تبدیل به این آرایه

یکی دیگر از ساده، بسیار ساده است، راهی برای شمارش یک شی مانند اسلحه وجود دارد: آن را به یک آرایه واقعی تبدیل کنید و از هر یک از روش های آرایه های موجود مورد بحث در بالا استفاده کنید. برای تبدیل، شما می توانید از روش جهانی Array.Prototype.slice استفاده کنید که می تواند به هر شیء عظیم اعمال شود. این کار بسیار ساده است که در مثال زیر نشان داده شده است:

var truearray \u003d array.protypy.slice.call (ArrayLikeObject، 0)؛
به عنوان مثال، اگر می خواهید مجموعه nodelist را به یک آرایه واقعی تبدیل کنید، شما نیاز به تقریبا چنین کد دارید:

var divs \u003d array.sprototype.slice.call (document.queryselectorall ("div")، 0)؛
به روز رسانی.: همانطور که در Rock و TorbaSow اشاره شد، در ES6 به جای Array.Prototype.Slice، شما می توانید از یک روش آرایه ای بیشتر استفاده کنید.

3. توجه به اشیاء محیط اجرایی

اگر شما روش های Array.Prototype را به اشیاء محیط اعدام (مانند مجموعه DOM) اعمال کنید، باید توجه داشته باشید که عملیات صحیح این روش ها در تمام محیط های اجرایی (از جمله در مرورگرها) تضمین نمی شود. این بستگی به رفتار یک شی خاص در یک محیط ورزشی خاص دارد، اگر دقیق تر از چگونگی عملیات انتزاعی در این شیء انجام شود. مشکل این است که استاندارد ES5 خود را به امکان رفتار نادرست جسم با توجه به این عملیات اجازه می دهد (به بند 8.6.2 مراجعه کنید).

بنابراین، بررسی کار روش های آرایه در هر محیط اعدام (مرورگر)، در آن شما قصد دارید از برنامه خود استفاده کنید.

  • I. مغز ماشین های حاضر
    1. روش foreach و روش های مرتبط
    2. چرخه برای
    3. استفاده مناسب از چرخه ... در
    4. چرخه برای ... (استفاده ضمنی از تکرار)
    5. استفاده صریح از تکرار
  • دوم جابجایی از اشیاء گسترده مانند
    1. استفاده از روش ها برای خاموش کردن آرایه های واقعی
    2. تبدیل به یک آرایه واقعی
    3. توجه داشته باشید بر روی اشیاء

I. مغز ماشین های حاضر

در حال حاضر سه راه برای تعویض عناصر آرایه واقعی وجود دارد:

  1. array.Prototype.Foreach روش؛
  2. چرخه کلاسیک برای؛
  3. "راست" چرخه ساخته شده برای ... در.

علاوه بر این، به زودی، با ظهور استاندارد ECMAScript 6 استاندارد (ES 6)، دو روش دیگر انتظار می رود:

  1. چرخه برای ... (استفاده ضمنی از تکرار)؛
  2. استفاده صریح از تکرار.

1. روش foreach و روش های مرتبط

اگر پروژه شما برای پشتیبانی از استانداردهای ECMAScript 5 (ES5) طراحی شده باشد، می توانید از یکی از نوآوری های آن استفاده کنید - روش foreach.

مثال استفاده:

var a \u003d ["a"، "b"، "c"]؛ a.foreach (console.log (ورود)؛))؛

به طور کلی، استفاده از foreach نیاز به یک کتابخانه شبیه سازی ES5-SHIM برای مرورگرهای است که پشتیبانی مادری برای این روش ندارند. این شامل IE 8 و نسخه های قبلی است که هنوز در برخی از نقاط استفاده می شود.

مزایای futeach متعلق به آن نیست که نیازی به اعلام متغیرهای محلی برای ذخیره شاخص و ارزش عنصر فعلی آرایه نیست، زیرا آنها به صورت خودکار به تابع فراخوانی (ستون) به عنوان استدلال انتقال می یابند.

اگر شما در مورد هزینه های احتمالی Columus برای هر عنصر نگران هستید، نگران نباشید و آن را بخوانید.

foreach طراحی شده است تا از تمام عناصر آرایه لذت ببرد، اما علاوه بر این، ES5 چندین روش مفید برای جابجایی تمام عناصر یا عناصر خاصی را به همراه انجام می دهد با هر گونه اقداماتی با آنها ارائه می دهد:

  • هر - باز می گردد اگر برای هر عنصر آرایه Columus مقدار ارزش داده شده به درست را بازگرداند.
  • برخی - درست می شود، اگر حداقل برای یک عنصر از آرایه Columus، مقدار داده شده به درست را بازگرداند.
  • filter - یک آرایه جدید ایجاد می کند، از جمله عناصر آرایه منبع که ستون ها درست می شوند.
  • نقشه - یک آرایه جدید را تشکیل می دهد که شامل مقادیر ستون های ناخوشایند است.
  • کاهش - یک آرایه را به یک مقدار واحد با استفاده از Colums به هر عنصر آرایه کاهش می دهد، از ابتدا شروع می شود (می تواند برای محاسبه مقدار عناصر آرایه و سایر توابع نتیجه مفید باشد).
  • defasteright - به طور مشابه برای کاهش کار می کند، اما موارد را در جهت معکوس حرکت می دهد.

2. چرخه برای

خوب قدیمی برای فرمان:

var a \u003d ["a"، "b"، "c"]؛ شاخص VAR؛ برای (index \u003d 0؛ شاخص< a.length; ++index) { console.log(a); }

اگر طول آرایه در طول کل چرخه تغییر نام داده شود، و چرخه خود متعلق به بهره وری کد (بعید است)، شما می توانید نسخه "بهینه تر" را برای ذخیره سازی طول آرایه استفاده کنید:

var a \u003d ["a"، "b"، "c"]؛ شاخص Var، Len؛ برای (index \u003d 0، len \u003d a.length؛ شاخص< len; ++index) { console.log(a); }

از لحاظ نظری، این کد باید کمی سریعتر از قبل انجام شود.

اگر روش برای سوراخ عناصر مهم نیست، شما می توانید حتی بیشتر از لحاظ بهینه سازی بروید و از متغیر برای ذخیره طول آرایه با تغییر روش معکوس خلاص شوید.

var a \u003d ["a"، "b"، "c"]؛ شاخص VAR؛ برای (index \u003d a.length - 1؛ index\u003e \u003d 0؛ --index) (console.log (a)؛)

با این حال، در موتورهای جاوا اسکریپت مدرن چنین بازی هایی با بهینه سازی معمولا به معنای چیزی نیست.

3. استفاده مناسب از چرخه ... در

اگر شما به شما توصیه می کنید از ... در چرخه استفاده کنید، به یاد داشته باشید که شمارش آرایه ها چیزی نیست که برای آنچه که در نظر گرفته شده است. بر خلاف چرخه غلط غلط مشترک برای ... در آن، شاخص های آرایه ای نیست، بلکه خواص ذکر شده از جسم است.

با این وجود، در بعضی موارد، مانند آرایه های پراکندهای پراکنده، برای ... ممکن است مفید باشد، اگر تنها اقدامات احتیاطی به عنوان مثال در مثال زیر نشان داده شود:

// a - آرایه مطرح شده var a \u003d؛ a \u003d "a"؛ a \u003d "b"؛ a \u003d "c"؛ برای (کلید var در a) (اگر (a.hasownProperty (کلید) && / \u003d $$$$$$ /. تست (کلید) && کلید<= 4294967294) { console.log(a); } }

در این مثال، دو چک بر روی هر تکرار چرخه انجام می شود:

  1. این واقعیت که آرایه دارایی خود را با کلید نام دارد (از نمونه اولیه آن به ارث برده نمی شود).
  2. واقعیت این است که کلید یک رشته حاوی یک رکورد دهدهی یک عدد صحیح است که ارزش آن کمتر از 4294967294 است. آخرین شماره آخر کجاست؟ از تعریف یک شاخص آرایه در ES5، که از آن به این معنی است که بزرگترین شاخص که می تواند یک عنصر در آرایه داشته باشد: (2 ^ 32 - 2) \u003d 4294967294.

البته، زمانی که چرخه اجرا می شود، چنین چک هایی طول می کشد. اما در مورد یک آرایه Rarefied، این روش کارآمدتر از چرخه است، زیرا در این مورد تنها این عناصر به وضوح در آرایه تعریف شده است. بنابراین، در مثال بالا، تنها 3 تکرار انجام می شود (برای شاخص های 0، 10 و 10،000) - در برابر 10001 در چرخه.

به منظور نوشتن چنین کد چک بزرگ در هر زمانی که Massif مورد نیاز است، می توانید آن را به عنوان یک تابع جداگانه ترتیب دهید:

تابع arrayhasownindex (آرایه، کلید) (بازگشت array.HasownProperty (کلید) && / /0$ | ^D*$/.test(key) && کلید<= 4294967294; }

سپس بدن چرخه از مثال به طور قابل توجهی کاهش خواهد یافت:

برای (اگر (arraysownindex (a، key)) (console.log (a)؛))

کد حسابرسی مورد بحث در بالا، جهانی مناسب برای همه موارد است. اما در عوض شما می توانید از یک نسخه کوتاهتر استفاده کنید، اگر چه به طور رسمی و نه کاملا صحیح، اما، با این حال، مناسب برای اکثر موارد:

برای (I.HasownProperty (کلید) && رشته (Parseint (کلید، 10)) \u003d\u003d\u003d کلید) (console.log (a)؛))

4. چرخه برای ... از (استفاده ضمنی از تکرار)

ES6، در حالی که هنوز در وضعیت پیش نویس قرار دارد، باید iTerators را در جاوا اسکریپت وارد کنید.

اشاره گر - این یک پروتکل است که توسط یک شیء اجرا می شود که روش استاندارد را برای به دست آوردن توالی مقادیر (محدود یا بی نهایت) تعیین می کند.
این شی دارای یک تکرار کننده است اگر روش بعدی () را تعریف کند - عملکرد بدون استدلال، که یک شی را با دو ویژگی باز می کند:

  1. انجام شده (Boolean) - اگر تکرار کننده به انتهای دنباله نتیجه رسید، درست انجام شود. در غیر این صورت، دارای ارزش نادرست است.
  2. ارزش - تعیین مقدار بازگشتی توسط تکرار را تعیین می کند. اگر اموال انجام شده درست باشد، ممکن است تعریف نشده باشد (وجود ندارد).

بسیاری از اشیاء داخلی، شامل این آرایه ها دارای تکرار پیش فرض هستند. ساده ترین راه استفاده از تکرار کننده در آرایه های واقعی این است که از یک جدید برای ... استفاده کنید.

یک مثال از استفاده برای ... از:

var val؛ var a \u003d ["a"، "b"، "c"]؛ برای (val of a) (console.log (val)؛)

در مثال بالا، برای ... به طور ضمنی، یک تکرار شیء آرایه را برای به دست آوردن هر مقدار آرایه به دست می آورد.

5. استفاده صریح از تکرار

ایترکنندگان نیز می توانند مورد استفاده قرار گیرند و به صراحت، با این حال، در این مورد، کد بسیار پیچیده تر می شود، در مقایسه با ... چرخه. به نظر می رسد این است:

var a \u003d ["a"، "b"، "c"]؛ ورودی var در حالی که (! (ورود \u003d a.next ()). انجام شده) (console.log (ورود به ارزش)؛)

دوم جابجایی از اشیاء گسترده مانند

علاوه بر آرایه های واقعی، جاوا اسکریپت نیز یافت می شود اشیاء گسترده مانند . با آرایه های واقعی، بستگان آنها مربوط به این واقعیت است که آنها دارایی طول و خواص با نام ها در قالب اعداد مربوط به عناصر آرایه است. شما می توانید مجموعه DODELIST DOM و استدلال های pseudomassive را در داخل هر تابع / روش تماس بگیرید.

1. استفاده از راه های خاموش کردن آرایه های واقعی

حداقل، اگر نه همه، روش های خاموش کردن آرایه های واقعی را می توان برای شمارش اشیاء گسترده مانند استفاده کرد.

طرح ها برای و برای ... می تواند به طور گسترده ای مانند اشیاء دقیقا همان شیوه ای را به آرایه های واقعی اعمال کند.

فراموشی و سایر آرایه ها. روش های پوتوتایپ نیز برای اشیاء عظیم قابل استفاده هستند. برای انجام این کار، از File.Call یا Function.Pply تماس بگیرید.

به عنوان مثال، اگر شما می خواهید برای درخواست به مالکیت گره شیء Childnodes اعمال کنید، این کار را انجام می دهد:

Array.Prototype.foreach.call (node.childnodes، تابع (کودک) (// هر چیزی را با کودک شی))؛

برای سهولت استفاده مجدد از این پذیرش، می توانید یک پیوند را به روش Array.Prototype.Foreach در یک متغیر جداگانه اعلام کنید و از آن به عنوان کاهش استفاده کنید:

// فرض بر این است که تمام کد زیر در یک منطقه از دید قرار دارد) var foreach \u003d array.prototype.foreach؛ // ... foreach.call (node.childnodes، تابع (کودک) (/ / چیزی را با شی کودک ایجاد کنید))؛

اگر یک شیء آرایه یک تکرار کننده باشد، می توان آن را به صراحت یا به طور ضمنی برای یکپارچگی جسم به همان شیوه ای که برای آرایه های واقعی استفاده می شود، مورد استفاده قرار گیرد.

2. تبدیل به این آرایه

یکی دیگر از ساده، بسیار ساده است، راهی برای شمارش یک شی مانند اسلحه وجود دارد: آن را به یک آرایه واقعی تبدیل کنید و از هر یک از روش های آرایه های موجود مورد بحث در بالا استفاده کنید. برای تبدیل، شما می توانید از روش جهانی Array.Prototype.slice استفاده کنید که می تواند به هر شیء عظیم اعمال شود. این کار بسیار ساده است که در مثال زیر نشان داده شده است:

var truearray \u003d array.protypy.slice.call (ArrayLikeObject، 0)؛

به عنوان مثال، اگر می خواهید مجموعه nodelist را به یک آرایه واقعی تبدیل کنید، شما نیاز به تقریبا چنین کد دارید:

var divs \u003d array.sprototype.slice.call (document.queryselectorall ("div")، 0)؛

3. توجه به اشیاء محیط اجرایی

اگر شما روش های Array.Prototype را به اشیاء محیط اعدام (مانند مجموعه DOM) اعمال کنید، باید توجه داشته باشید که عملیات صحیح این روش ها در تمام محیط های اجرایی (از جمله در مرورگرها) تضمین نمی شود. این بستگی به رفتار یک شی خاص در یک محیط ورزشی خاص دارد، اگر دقیق تر از چگونگی عملیات انتزاعی در این شیء انجام شود. مشکل این است که استاندارد ES5 خود را به امکان رفتار نادرست جسم با توجه به این عملیات اجازه می دهد (به بند 8.6.2 مراجعه کنید).

بنابراین، بررسی کار روش های آرایه در هر محیط اعدام (مرورگر)، در آن شما قصد دارید از برنامه خود استفاده کنید.

تعریف و کاربرد

روش جاوا اسکریپت برای هر () اجازه می دهد تا شما را به انجام عملکرد انتقال یک بار برای هر عنصر در آرایه در یک شاخص صعودی.

لطفا توجه داشته باشید که تابع فراخوانی به عنوان پارامتر روش منتقل شده است برای هر () این برای عناصر آرایه ای از راه دور یا از دست رفته ایجاد نخواهد شد.

محدوده عناصر پردازش شده با استفاده از روش برای هر () نصب شده قبل از اولین با یک تابع فراخوانی تماس بگیرید اگر عناصر بعد از تماس با عناصر به آرایه اضافه شده باشند، پس از آن بر روی چنین عناصری تابع نامیده می شود.

اگر مقادیر عناصر موجود آرایه در زمان اعدام تغییر یافته باشد، مقدار به عنوان تابع انتقال ارزش در آن زمان زمانی که روش است برای هر () آنها را باز می گرداند اگر اقلام قبل از بازدید آنها حذف شوند، چنین عناصری از آن بازدید نخواهند شد. اگر مواردی که قبلا بازدید کرده اند، در طول گذرگاه از طریق آرایه حذف می شوند، سپس موارد بعد از آن حذف می شوند.

مرورگرهای پشتیبانی

روش
اپرا

iExplorer

حاشیه، غیرمتمرکز.
برای هر () آرهآرهآرهآره9.0 آره

اصطلاح جاوا اسکریپت:

// فقط با ویژگی Callback آرایه..oreach (تابع ( ارزش فعلی., فهرست مطالب, آر)); // با استفاده از یک شی که کلمه کلیدی ممکن است به آن اشاره شود آرایه..oreach (تابع ( ارزش فعلی., فهرست مطالب, آر), اینو);

نسخه جاوا اسکریپت

Ecmascript 5.1 (اجرا شده در جاوا اسکریپت 1.6)

مقادیر پارامتر

پارامترشرح
تابع. ویژگی فراخوانی که اجرا خواهد شد یک یک بار برای هر عنصر در آرایه. تابع پارامترهای زیر را می گیرد:
  • ارزش فعلی. - ارزش عنصر فعلی
  • فهرست مطالب - شاخص آرایه ای از عنصر فعلی.
  • آر - آرایه ای که عنصر فعلی متعلق به آن است (با توجه به آن گذر رخ می دهد).

اگر چیزی به عنوان یک پارامتر از روش منتقل شود، که هدف از عملکرد نیست، استثناء ایجاد می شود. TypeError. پارامتر اجباری

اینو یک شی که می تواند به این کلمه کلیدی در داخل تابع فراخوانی اشاره کند. اگر پارامتر باشد اینو استفاده نشده است، پس از آن به عنوان یک مقدار از این استفاده می شود undefined (در نهایت این بستگی به قوانین معمول از زمینه عملکرد). پارامتر اختیاری

مثال استفاده

در مثال زیر، ما به نحوه دریافت مقدار تمام عناصر آرایه با استفاده از آن نگاه خواهیم کرد جاوا اسکریپت روش برای هر ():

var array \u003d؛ var sum \u003d 0؛ // متغیر حاوی مقدار عددی را آغاز می کند آرایه..برای هر ( // تماشای تمام عناصر آرایه آرایه تابع sumgumber ( ارزش فعلی.) { مجموع += ارزش فعلی.؛ )) کنسول ( مجموع); // مقدار متغیر مبلغ برابر با 50 را نمایش می دهد

در مثال زیر، ما به استفاده نگاه خواهیم کرد دومین روش استدلال برای هر ()که نشان می دهد یک شی که ما می توانیم با استفاده از این کلمه کلیدی در داخل تابع callback اشاره کنیم:

اعداد var \u003d؛ // یک متغیر حاوی مجموعه ای از مقادیر عددی را آغاز کنید var squared \u003d؛ // یک متغیر حاوی یک آرایه خالی را آغاز کنید var myObject \u003d ( // متغیر را شامل یک شیء اولیه مربع: تابع ( ارزش فعلی.) { // روش شیء که ارزش را می گیرد برگشت. ارزش فعلی. * ارزش فعلی.; // و آن را به مربع متصل می شود } } ; شماره..برای هر ( // تماشای تمام عناصر آرایه اعداد تابع ( ارزش فعلی.) { مربع.push (این. square ( ارزش فعلی.)); // اضافه کردن به مجموعه ای از مقدار بازگشت مربع از روش مربع از شی myObject } , myobject // شی که ما با استفاده از کلمه کلیدی اشاره می کنیم) کنسول ( مربع); // نمایش مقدار متغیر مربع برابر است؛

نه چندان دور من را گرفتم جاوا اسکریپت یک آرایه انجمنی ایجاد کنید. شگفت آور، او قبلا هرگز مورد نیاز نبود جاوا اسکریپت. من صعود کردم تا در اینترنت جستجو کنم، چگونه این کار را انجام دهم. و بسیار شگفت زده شد که تعداد زیادی از مردم بنویسند که غیرممکن است جاوا اسکریپت این نیست. خوشبختانه، سالها تجربه من پیشنهاد کرد که آنها بی معنی را حمل کنند. بنابراین، در پایان، یاد گرفتم نحوه ایجاد یک آرایه انجمنی در جاوا اسکریپتچه چیزی در این مقاله به شما می گوید.

کد زیر نوشته شده است آرایه انجمنی ایجاد شده استسپس یک عنصر دیگر اضافه شده است و در نهایت، آرایه از طریق چرخه منتقل می شود:

در این مقاله بررسی شده است ایجاد توده های وابسته، تغییر آنها، و همچنین پیچیدگی کامل از طریق چرخه برای. شخصا استفاده می شود آرایه های انجمنی در جاوا اسکریپت فقط یک روز، اما لازم است که در مورد چنین احتمالی بدانیم.

مقاله ای که در آن ما در نمونه هایی برای استفاده از تابع و روش jQuery هر کتابخانه در نظر می گیریم.

در کتابخانه جی کوئری 2 نهاد مختلف با نام هر کدام وجود دارد.

اولین (jquery.each) یک تابع جی کوئری جهانی است که شما می توانید یک نیروی بی رحم از عناصر آرایه یا شیء ایجاد کنید.

دوم (هر کدام) یک روش است که به مجموعه عناصر مربوط می شود تا یک چرخه را بر روی آنها سازماندهی کند.

هر چرخه (jquery.each). نمونه هایی از استفاده از

تابع نحو هر کدام:

// آرایه یا شیء - آرایه یا جسم، عناصر یا خواص آن باید مرتب شود // callback - یک تابع که برای هر عنصر آرایه یا اموال Object $ انجام می شود. مورد

کار با هر تابع به نمونه ها نگاه می کند.

مثال شماره 1 این کار توسط مرتکتر از تمام عناصر آرایه (آرایه) انجام می شود.

// آرایه، متشکل از 3 خط var arr \u003d ["ماشین"، "کامیون"، "اتوبوس"]؛ // پس از ARR $. هر آرایه (ARR، تابع (شاخص، ارزش) (/ / اقدامات که برای هر عنصر از آرایه // انجام می شود - این شاخص فعلی عنصر آرایه (شماره) // است ارزش ارزش عنصر فعلی آرایه // برداشت شاخص و ارزش آرایه در کنسول کنسول .LOG ("شاخص:" + index + "؛ مقدار:" + مقدار)؛)))؛ / * نتیجه (در کنسول): index: 0؛ ارزش: شاخص خودرو: 1؛ معنی: شاخص کامیون: 2؛ ارزش: اتوبوس * /

در کد بالا، هر تابع برای شمارش آرایه استفاده می شود. تابع دارد 2 پارامترهای اجباری. پارامتر اول، ماهیت (آرایه یا جسم) است، عناصر (خواص) که باید مرتب شوند. در این مورد، این یک آرایه فلش است. پارامتر دوم یک تابع فراخوانی است که برای هر عنصر (در این مورد) انجام می شود. این دارای 2 پارامتر است که با متغیرهای مناسب در داخل آن موجود است. پارامتر اول شماره توالی عنصر است (شمارش معکوس از 0 انجام می شود). پارامتر دوم مقدار عنصر فعلی آرایه است.

مثال شماره 2 در این مثال، ما تمام خواص جسم را وجود خواهیم داشت.


// Smartphone Object دارای 5 var smartphone \u003d ("نام" خواص: "LG G5 SE"، "سال": "2016"، "screen-size": "5.3"، "رزولوشن صفحه نمایش": "2560 x 1440" ، "OS": "Android 6.0 (Marshmallow)")؛ // پس از شما توسط SmartPhone Object $. هر (گوشی هوشمند، عملکرد (کلید، ارزش) (/ / / / / / / / / / / اعمال که برای هر ویژگی Object // کلید اجرا می شود - نام فعلی خواص آرایه // ارزش - ارزش اموال فعلی شیء // از نام مالکیت و ارزش آن در کنسول کنسول را برداشت ("املاک:" + کلید + "؛ مقدار:" + مقدار)؛))؛ / * نتیجه (در کنسول): املاک: نام؛ ارزش: املاک LG G5 SE: سال؛ ارزش: املاک 2016: اندازه صفحه؛ ارزش: 5.3 املاک: رزولوشن صفحه نمایش؛ ارزش: 2560 x 1440 املاک: OS؛ معنی: Android 6.0 (Marshmallow) * /

هر تابع را می توان برای اشیاء جاوا اسکریپت شلوغ استفاده کرد. تفاوت بین استفاده از آن تنها در این واقعیت است که پارامترهای تابع فراخوانی دارای ارزش های دیگر هستند. پارامتر اول نام خواص شی را ذخیره می کند، و دوم ارزش این ویژگی است.

مثال شماره 3 در آن، ما ساختار پیچیده تر وجود خواهد داشت (در نظر بگیرید که چگونه از هر توطئه استفاده کنید).

// شی متشکل از 2 خواص. هر ویژگی این شیء دارای یک آرایه به عنوان یک مقدار است، عناصر آن نیز اشیاء var مقالات \u003d ("bootstrap": [("id": "1"، "عنوان": "مقدمه")، ("id" : "2"، "عنوان": "چگونه به مجموعه")، ( "ID": "3"، "عنوان": "شبکه")]، "جاوا اسکریپت": [( "ID": "4"، " عنوان ":" مبانی ")، (" ID ":" 5 "،" عنوان ":" نمونه عنصر ")])؛ $ .هر (Console.log ( "بخش:" + کلید)؛ $ .هر (داده ها، تابع (شاخص، ارزش) (Console.log ( "مقاله: ID \u003d" + ارزش [ID "+"؛ نام \u003d "+ عبارت [" عنوان "])؛))؛))؛ / * نتیجه: بخش: بوت استرپ مقاله: ID \u003d 1؛ نام \u003d مقدمه مقاله: ID \u003d 2؛ عنوان \u003d نحوه نصب مقاله: id \u003d 3؛ نام \u003d بخش مش: جاوا اسکریپت مقاله: ID \u003d 4؛ نام \u003d مبانی مقاله: ID \u003d 5؛ نام \u003d عناصر نمونه برداری * /

چگونه به قطع هر یک از (خروج از یک چرخه).

وقفه (شکستن) هر چرخه با استفاده از بیانیه بازگشت انجام می شود، که باید مقدار نادرست را بازگرداند.

به عنوان مثال، ما اجرای هر چرخه را پس از پیدا کردن شماره 7 شماره 7 در آرایه قطع می کنیم:

// آرایه شامل 5 عدد var arr \u003d؛ // شماره ای که می خواهید پیدا کنید find \u003d 7؛ // پس از AR ARR $. هر آرایه (ARR، تابع (شاخص، ارزش) (// اگر شماره مورد نیاز یافت شود، پس اگر (value \u003d\u003d\u003d پیدا کردن) (// / / / / آن را به کنسول کنسول حذف کنید ( "هورا تعداد!" + مشاهده +: + فهرست "یافت این عدد دارای یک شاخص")؛ // قطع چرخه بازگشت کاذب؛) دیگری (// در غیر این صورت، برای نمایش تعداد جمعیت فعلی Console.log به کنسول ( "تعداد کنونی:" + ارزش)؛)))؛ / * نتیجه (در کنسول): شماره فعلی: 5 شماره فعلی: 4 Hooray! شماره 7 پیدا شد! این شماره دارای شاخص است: 2 * /

چگونه به تکرار بعدی بروید (هر کدام)؟

در هر یک از وقفه های تکرار فعلی و انتقال به بعدی با استفاده از بیانیه بازگشتی انجام می شود که باید از کاذب متفاوت باشد.

// یک آرایه متشکل از var arr \u003d اعداد؛ // آرایه ای که باید شامل تمام عناصر آرایه ARRAL باشد، به جز مقادیر Var Newarr \u003d؛ // پس از arrow arrow Arr.each (ARR، تابع (شاخص، ارزش) (// / / اگر اندازه گیری شود، پس از آن شما را از دست خواهد داد اگر (مقدار٪ 2 \u003d\u003d\u003d 0) (/ / بیشتر از جریان بیشتر ITERATE و MACHE به بازگشت بعدی؛) // اضافه کردن به آرایه NEWARR VALUE NEWARR.PUSH (ارزش)؛))؛ console.log ("آرایه منبع (ARR):" + arr.join ())؛ console.log ("نتیجه آرایه (Newarr):" + newarr.join ())؛ / * نتیجه (در کنسول): آرایه منبع (ARR): 3،5،4،9،17،19،30،35،40 نتیجه آرایه (نیور): 3،5،9،17،19،35 * /

عناصر فعلی را ببندید (. هر)

هر روش نحو (تنها به موارد انتخاب شده انتخاب شده است):


هر (عملکرد)؛ // تابع - یک تابع که برای هر مورد از شی فعلی انجام می شود

ما تجزیه و تحلیل خواهیم کرد که چگونه روش بر روی مثال زیر کار می کند (با افزایش بیش از حد عناصر DIV):


در مثال بالا، هر روش از مجموعه فعلی (عناصر انتخاب شده توسط انتخاب $ ("div") استفاده می کند. به عنوان یک ابزار دستی، یک تابع همیشه انجام می شود، که برای هر عنصر شماره گیری فعلی انجام می شود (در این مورد برای هر عنصر DIV) انجام می شود. این تابع دارای 2 پارامتر اختیاری است. یکی از آنها (شاخص) تعداد توالی تکرار فعلی و دوم (عنصر) - DOM مرجع به عنصر فعلی است. علاوه بر این، در داخل تابع، این کلمه کلیدی در دسترس است، که و همچنین پارامتر دوم شامل یک لینک DOM به عنصر فعلی است.

به عنوان مثال، ویژگی HREF را برای همه اقلام و در صفحه به کنسول برداشت.

$ ("a"). هر (تابع (console.log ($ (این) .attr ("href"))؛))؛

$ ("a"). هر (تابع () (var link \u003d $ (این) .ATTR (href ")؛ اگر ((link.indexof (http: //") \u003d\u003d 0) || .indexof ("https: //") \u003d\u003d 0)) \u003d\u003d 0)) (console.log ("href references \u003d" + لینک)؛)))))))))) // اگر لینک های زیر در صفحه قرار گیرند: // yandex // چگونه جاوا اسکریپت کار می کند؟ // bootstrap // سپس در کنسول ما نتیجه زیر را مشاهده خواهیم کرد: // https://www.yandex.ru/ // http://getbootstrap.com/

به عنوان مثال، در نظر بگیرید که چگونه هر چرخه را بر روی عناصر DOM سازماندهی کنید که نام نام را داشته باشید (با حرکت دادن تمام عناصر یک کلاس).

Raspberry Pi
تک هیئت مدیره
اینتل Galileo Gen2.
19$
کاج A64 Plus.

به عنوان مثال، ما تجزیه و تحلیل خواهیم کرد که چگونه از طریق تمام اقلام موجود در صفحه برویم.

به عنوان مثال، ارزش تمام عناصر ورودی را در صفحه برداشت.

$ ("ورودی"). هر (console.log ($ (این) .val ())؛))؛

به عنوان مثال، با حرکت دادن تمام عناصر کودک واقع در UL با ID \u003d "MyList" (هر کودک).

  • HTML
  • جاوا اسکریپت

یک روش را که می توانید آخرین شاخص (عنصر) را در هر روش جی کوئری تعریف کنید را در نظر بگیرید.

// عناصر var myList \u003d $ را انتخاب کنید ("ul li")؛ // تعیین تعداد عنصر در نمونه var مجموع \u003d mylist.length؛ // ما عناصر انتخاب شده myList.each را انجام می دهیم (تابع (شاخص) (index \u003d\u003d\u003d مجموع - 1) (// این آخرین عنصر در نمونه است)))؛