💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ فرزام مدنی پور
سوال در مورد ابجکت
محسن موحد حل شده توسط محسن موحد

سلام حسته نباشید.

اگر برای مسال آبجکت ما دارای بیشتر از 2 تا مقدار باشد اون موقع باید چیکار کنیم. چون توی ویدیو با قرار دادن یک شرط درون value میتوان فقط دوتا مقدار رو لاگ گرفت نه بیشتر. کد پایین مقدار اسم و فامیل رو میاره اما مقدار سن رو نمیاره باید چیکار کنم.

let testITB = {
    nam : 'farzam',
    fam : 'maadanipour',
    age : '19',
    ITB : [],
    next : function () {
        if (this.ITB.length >= 3) {
            return {done : true}
        } else {
            this.ITB.push(this.nam);
        }
        return {
            value : (this.ITB.length == 1 ? this.nam : this.fam ),
            done : false
        }
    },
    [Symbol.iterator] : function () {
        return this;
    }
}
for (let x of testITB) {
    console.log(x);
}

سلام،

به این شکل عمل کنید:

let testITB = {
    nam : 'farzam',
    fam : 'maadanipour',
    age : '19',
    ITB : [],
    values: function() {
        return [this.nam, this.fam, this.age];
    },
    next : function () {
        if (this.ITB.length >= this.values().length) {
            return {done : true};
        } else {
            this.ITB.push(this.values()[this.ITB.length]);
            return {
                value : this.ITB[this.ITB.length - 1],
                done : false
            };
        }
    },
    [Symbol.iterator] : function () {
        return this;
    }
}
for (let x of testITB) {
    console.log(x);
}

در این کد، تابع values() یک آرایه از همه مقادیری که می‌خواهید برگردانید را فراهم می‌کند. در هر بار فراخوانی next, یک مقدار جدید به آرایه ITB اضافه می‌شود، و این مقدار جدید برگردانده می‌شود. شرط برای پایان یافتن ایتریتور (تابع next که {done: true} را برمی‌گرداند) زمانی فرا می‌رسد که تمام مقادیر موجود در تابع values() اضافه شده باشند.

 

همچنین میتونید در کد قبلی بجای for..of از for..in استفاده کنید، به شکل زیر:

let testITB = {
    nam: 'farzam',
    fam: 'maadanipour',
    age: '19',
    ITB: [],
    next: function() {
        if (this.ITB.length >= 3) {
            return {done: true}
        } else {
            this.ITB.push(this.nam);
        }
        return {
            value: (this.ITB.length == 1 ? this.nam : this.fam),
            done: false
        }
    },
    [Symbol.iterator]: function() {
        return this;
    }
}
for (let key in testITB) {
    if (key !== 'ITB' && key !== 'next' && typeof testITB[key] !== 'function') {
        console.log(`${key}: ${testITB[key]}`);
    }
}
بهترین پاسخ
محسن موحد ۱۱ فروردین ۱۴۰۳، ۰۸:۱۷

این قسمت از کد رو متوجه نشدم؟؟

 value : this.ITB[this.ITB.length - 1],
فرزام مدنی پور ۲۰ فروردین ۱۴۰۳، ۰۶:۵۲