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

با سلام

در کد زیر در قسمت اضافه کردن مخاطب id دو تا دوتا اضافه میشه 

اگر ممکنه بررسی بفرمایید

async function AddNewContact(){

    const FirstName = await rl.question('FirstName: ');

    const LastName = await rl.question('LastName: ');

    var id = 0;

    const NewContact = {

        id ,

        FirstName ,

        LastName

    }

    const LostContact = contactsList.length;

    console.log('Lostcontact:' + LostContact);

    if (LostContact == 0){

         NewContact.id = 0 ;

    } else {

        NewContact.id = LostContact + 1;

         }

       //const id = LostContact ? LostContact.id + 1 : 0;

    // LostContact = contactsList[contactsList.length -1];

        

    contactsList.push(NewContact);

    await saveContacts(contactsList);

 

}

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

ممنون میشم راهنمایی بفرمایید

سلام،
1. شما در محاسبه آیدی اشتباه دارید. مشکل اینجاست که شما دارید از طول آرایه برای تعیین ID استفاده می‌کنید. طول آرایه مشخص نمیکنه که آیدی بعدی چه عددی است. ممکنه در این بین چند مورد حذف شده باشند، همچنین طول آرایه همیشه یک واحد بیشتر از آیدیه. روش صحیح به این شکله که شما آیدی آخرین رکورد رو بدست بیارید و یک واحد بهش اضافه کنید. به این شکل میتونید عمل کنید:

const newId = contactsList[contactsList.length - 1].id + 1;

همچنین به روش زیر هم میتونید عمل کنید:

let maxId = contactsList.reduce((max, contact) => Math.max(max, contact.id), -1);
const newId = maxId + 1;

 

2. این مشکل احتمالاً به خاطر نحوه‌ خواندن و نوشتن فایل JSON هست. باید مطمئن بشیم که قبل از هر تغییری، محتویات فایل رو می‌خونیم نه اینکه هر مرتبه فایل پاک بشه و محتوای جدید write بشه.

محسن موحد ۲۲ مرداد ۱۴۰۳، ۱۷:۳۰