جمع آوری و تکرار، راه ES6

مشخصات ECMAScript 6، در حالی که هنوز در فرم پیش نویس است ، نوید بسیاری از ابزارهای جدید هیجان انگیز را برای اضافه کردن به کمربند برنامه نویس جاوا اسکریپت می دهد. کلاس‌های جدید مانند Set و Map راه‌حل‌های بومی را برای کار با انواع خاصی از مجموعه‌ها ارائه می‌کنند و دستور for...of جایگزینی زیبا برای روش‌های سنتی تکرار بر روی داده‌ها است.

Set راهی برای پیگیری مجموعه‌ای از آیتم‌ها ارائه می‌دهند که در آن هر آیتم می‌تواند حداکثر یک بار ظاهر شود. Map عملکرد بیشتری نسبت به قبل با استفاده از Object برای مرتبط کردن کلیدها با مقادیر ارائه می‌دهند—با Map ، کلیدهای شما نباید رشته‌ای باشند، و لازم نیست نگران انتخاب تصادفی نام کلیدی باشید که با آن تداخل دارد. نام های متد یک Object . عملیات جستجو در Map بومی و Set در زمان ثابت انجام می‌شود، که نسبت به آنچه که با پیاده‌سازی‌های شبیه‌سازی شده امکان‌پذیر است، افزایش کارایی را ارائه می‌دهد.

نمونه زیر ساخت یک Set و استفاده از for...of برای تکرار بر روی عناصر آن را نشان می دهد:

<pre id="log"></pre>

<script>
    function log() {
    document.querySelector('#log').textContent += Array.prototype.join.call(arguments, '') + '\n';
    }

    log('Creating, using, and iterating over a Set:');
    var randomIntegers = new Set();
    // Generate a random integer in the range [1..10] five times,
    // and use a Set to keep track of the distinct integers that were generated.
    for (var i = 0; i < 5; i++) {
    randomIntegers.add(Math.floor(Math.random() * 10) + 1);
    }
    log(randomIntegers.size, ' distinct integers were generated.');
    log('The number 10 was ', randomIntegers.has(10) ? '' : 'not ', 'one of them.');
    log('Here\'s all of them:');
    // Use for...of to iterate over the items in the Set.
    // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-iteration-statements
    // The Set iterator yields a single value corresponding to each entry in the Set.
    for (var item of randomIntegers) {
    log(item);
    }
</script>

در اینجا یک نمونه متناظر است که استفاده و تکرار روی Map را نشان می دهد:

<script>
    log('\nCreating and iterating over a Map:');
    // Maps can be initialized by passing in an iterable value (https://people.mozilla.org/~jorendorff/es6-draft.html#sec-map-iterable)
    // Here, we use an Array of Arrays to initialize. The first value in each sub-Array is the new
    // Map entry's key, and the second is the item's value.
    var typesOfKeys = new Map([
    ['one', 'My key is a string.'],
    ['1', 'My key is also a string'],
    [1, 'My key is a number'],
    [document.querySelector('#log'), 'My key is an object']
    ]);
    // You can also call set() to add new keys/values to an existing Map.
    typesOfKeys.set('!!!!', 'My key is excited!');

    // Use for...of to iterate over the items in the Map.
    // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-iteration-statements
    // There are several types of Map iterators available.
    // typesOfKeys.keys() can be used to iterate over just the keys:
    log('Just the keys:');
    for (var key of typesOfKeys.keys()) {
    log('  key: ', key);
    }

    // typesOfKeys.values() can be used to iterate over just the values:
    log('Just the values:');
    for (var value of typesOfKeys.values()) {
    log('  value: ', value);
    }

    // The default Map iterator yields an Array with two items; the first is the Map entry's key and the
    // second is the Map entry's value. This default iterator is equivalent to typesOfKeys.entries().
    log('Keys and values:');
    // Alternative, ES6-idiomatic syntax currently supported in Safari & Firefox:
    // for (var [key, value] of typesOfKeys) { … }
    for (var item of typesOfKeys) {
    log('  ', item[0], ' -> ', item[1]);
    }
</script>

برخی از مرورگرها، مانند کروم ، اینترنت اکسپلورر و فایرفاکس قبلاً از Set s و Map s پشتیبانی کرده اند. پشتیبانی بومی که با کتابخانه‌های polyfill مانند es6-collections یا es6-shim تکمیل می‌شود به این معنی است که توسعه‌دهندگان جاوا اسکریپت می‌توانند از امروز شروع به ساختن با این نوع مجموعه‌های جدید کنند. هیچ پلی پری برای عبارت for...of موجود نیست (اگرچه می توان پشتیبانی از طریق Traceur را انتقال داد)، اما پشتیبانی بومی امروز در کروم و فایرفاکس در دسترس است.

به‌روزرسانی، سپتامبر 2014 : به یک گزینه پلی‌فیل اضافی، es6-shim مرتبط است