प्रौद्योगिकी साझेदारी

ES6 पुनरावर्तकः तथा for...of loop (5) .

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

पुनरावर्तकस्य विशेषताः : १.

  • एकीकृत-अन्तरफलकम् : भवेत् तत् सरणी, स्ट्रिंग् अथवा कस्टम् ऑब्जेक्ट्, यावत् तेषां पूर्वनिर्धारित-पुनरावृत्तिः भवति, तावत् भवन्तः for...of लूप् इत्यस्य उपयोगं भ्रमणार्थं कर्तुं शक्नुवन्ति ।
  • पुनरावर्तनीयवस्तूनि : [Symbol.iterator] विशेषतायुक्तानि वस्तूनि पुनरावर्तनीयानि इति मन्यन्ते । [Symbol.iterator] इति एकः विधिः यः पुनरावर्तकं प्रत्यागच्छति ।
  • Iterator object: iterator इति next() मेथड् युक्तं ऑब्जेक्ट् अस्ति यत् मूल्यं कृतं गुणं च युक्तं ऑब्जेक्ट् रिटर्न् करोति । value वर्तमान पुनरावृत्तेः मूल्यं भवति, done च पुनरावृत्तिः समाप्तः अस्ति वा इति सूचयति इति बूलियनमूल्यं भवति ।

for...पाशलक्षणानाम् : १.

  • संक्षिप्तवाक्यविन्यासः : अतिरिक्तपुनरावृत्तितर्कं न लिखित्वा पुनरावर्तनीयवस्तुनि प्रत्येकं तत्त्वस्य माध्यमेन पुनरावृत्तिं कर्तुं for...of इत्यस्य उपयोगं कुर्वन्तु ।
  • स्वचालितपुनरावृत्तिः : for...of लूप् स्वयमेव अग्रिममूल्यं प्राप्तुं पुनरावर्तकस्य next() मेथड् आह्वयति ।
  • अपवादनियन्त्रणम् : पुनरावृत्तिप्रक्रियायाः समये क्षिप्तानाम् अपवादानाम् ग्रहणार्थं for...of लूप् इत्यस्मिन् try...catch इत्यस्य उपयोगं कर्तुं शक्नुवन्ति ।

1: सरणीं भ्रमितुं for...of इत्यस्य उपयोगं कुर्वन्तु

let numbers = [1, 2, 3, 4, 5];

for (let number of numbers) {
    console.log(number); // 依次输出 1 到 5
}
  • 1
  • 2
  • 3
  • 4
  • 5

2: तारं भ्रमितुं for...of इत्यस्य उपयोगं कुर्वन्तु

let str = "Hello";

for (let char of str) {
    console.log(char); // 依次输出 'H', 'e', 'l', 'l', 'o'
}
  • 1
  • 2
  • 3
  • 4
  • 5

3: कस्टम पुनरावर्तकः

let myIterable = {
    [Symbol.iterator]: function* () {
        yield 1;
        yield 2;
        yield 3;
    }
};

for (let value of myIterable) {
    console.log(value); // 依次输出 1, 2, 3
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

४: कस्टम् इटरेटर् इत्यनेन सह for...of इत्यस्य उपयोगः

function* numberIterator(max) {
    let current = 1;
    while (current <= max) {
        yield current++;
    }
}

for (let number of numberIterator(5)) {
    console.log(number); // 依次输出 1 到 5
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

५: अपवादं ग्रहीतुं for...of इत्यस्य उपयोगं कुर्वन्तु

let iterable = [1, 2, 3, 4, 'error', 6];

for (let item of iterable) {
    try {
        if (typeof item === 'string') {
            throw new Error('Invalid value');
        }
        console.log(item * 2); // 依次输出 2, 4, 6, 8
    } catch (e) {
        console.error(e.message); // 输出:Invalid value
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

6: पुनरावर्तनीयानि वस्तुनि सरणीरूपेण परिवर्तयितुं Array.from इत्यस्य उपयोगं कुर्वन्तु

let str = "Iterator";

let arrayFromIterable = Array.from(str);
console.log(arrayFromIterable); // 输出:['I', 't', 'e', 'r', 'a', 't', 'o', 'r']
  • 1
  • 2
  • 3
  • 4

सूचना

संगतता:for...of लूप्स् आधुनिकब्राउजर्स् तथा Node.js इत्यत्र समर्थिताः सन्ति, परन्तु केचन प्राचीनाः जावास्क्रिप्ट् वातावरणाः न समर्थाः भवेयुः ।
प्रदर्शनम्‌: बृहत् संग्रहाणां कृते, for...of लूप् पारम्परिक for लूप् इव कार्यक्षमः न भवेत् यतोहि प्रत्येकं पुनरावृत्तिः पुनरावर्तकस्य next() मेथड् इत्यस्य आह्वानस्य आवश्यकता भवति ।

7: सरणीयाः Symbol.iterator

let arr = [1, 2, 3];

// 数组是可迭代对象,具有默认的 Symbol.iterator 属性
let iterator = arr[Symbol.iterator]();

console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

8: स्ट्रिंग् इत्यस्य Symbol.iterator

let str = "abc";

// 字符串也是可迭代对象
let strIterator = str[Symbol.iterator]();

console.log(strIterator.next()); // { value: "a", done: false }
console.log(strIterator.next()); // { value: "b", done: false }
console.log(strIterator.next()); // { value: "c", done: false }
console.log(strIterator.next()); // { value: undefined, done: true }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

9: Symbol.iterator इत्यस्य मैन्युअल् रूपेण उपयोगं कुर्वन्तु

let myObj = {
    items: [3, 5, 7],
    [Symbol.iterator]: function* () {
        for (let item of this.items) {
            yield item * 2; // 迭代器返回值的两倍
        }
    }
};

let iterator = myObj[Symbol.iterator]();

console.log(iterator.next()); // { value: 6, done: false }
console.log(iterator.next()); // { value: 10, done: false }
console.log(iterator.next()); // { value: 14, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15