O'zbek

JavaScript'dagi for, forEach va map metodlari unumdorligini taqqoslash. Dasturchilar uchun amaliy misollar va eng yaxshi qo'llash holatlari.

JavaScript'da For Loop, forEach va Map: Unumdorlikni Taqqoslash

JavaScript massivlar bo'ylab iteratsiya qilishning bir necha usullarini taklif etadi, ularning har biri o'zining sintaksisi, funksionalligi va eng muhimi, unumdorlik xususiyatlariga ega. for loop, forEach va map o'rtasidagi farqlarni tushunish, ayniqsa katta hajmdagi ma'lumotlar yoki unumdorlik muhim bo'lgan ilovalar bilan ishlaganda samarali va optimallashtirilgan JavaScript kodini yozish uchun juda muhimdir. Ushbu maqolada har bir metodning nozik jihatlarini o'rganib, qaysi birini qachon ishlatish bo'yicha yo'riqnoma beruvchi to'liq unumdorlik taqqoslanishi taqdim etiladi.

Kirish: JavaScript'da Iteratsiya

Massivlar bo'ylab iteratsiya qilish dasturlashdagi asosiy vazifadir. JavaScript buni amalga oshirish uchun turli usullarni taqdim etadi, ularning har biri o'ziga xos maqsadlar uchun mo'ljallangan. Biz uchta keng tarqalgan metodga e'tibor qaratamiz:

To'g'ri iteratsiya usulini tanlash kodingizning unumdorligiga sezilarli darajada ta'sir qilishi mumkin. Keling, har bir metodni chuqurroq o'rganib, ularning unumdorlik xususiyatlarini tahlil qilaylik.

for Loop: An'anaviy Yondashuv

for loop JavaScript va boshqa ko'plab dasturlash tillaridagi eng asosiy va keng tushuniladigan iteratsiya konstruksiyasidir. U iteratsiya jarayoni ustidan aniq nazoratni ta'minlaydi.

Sintaksis va Foydalanish

for loopning sintaksisi juda oddiy:


for (let i = 0; i < array.length; i++) {
  // Har bir element uchun bajariladigan kod
  console.log(array[i]);
}

Bu yerda komponentlarning tahlili:

Unumdorlik Xususiyatlari

for loop odatda JavaScript'dagi eng tezkor iteratsiya usuli hisoblanadi. U eng kam qo'shimcha xarajatlarni taklif qiladi, chunki u to'g'ridan-to'g'ri sanagichni boshqaradi va massiv elementlariga ularning indeksi yordamida kiradi.

Asosiy afzalliklari:

Misol: Dunyoning turli burchaklaridan kelgan buyurtmalarni qayta ishlash

Tasavvur qiling, siz turli mamlakatlardan kelgan buyurtmalar ro'yxatini qayta ishlayapsiz. Soliq maqsadlarida ma'lum mamlakatlardan kelgan buyurtmalarni boshqacha tarzda qayta ishlashingiz kerak bo'lishi mumkin.


const orders = [
  { id: 1, country: 'USA', amount: 100 },
  { id: 2, country: 'Canada', amount: 50 },
  { id: 3, country: 'UK', amount: 75 },
  { id: 4, country: 'Germany', amount: 120 },
  { id: 5, country: 'USA', amount: 80 }
];

function processOrders(orders) {
  for (let i = 0; i < orders.length; i++) {
    const order = orders[i];
    if (order.country === 'USA') {
      console.log(`AQSh buyurtmasi ${order.id} qayta ishlanmoqda, miqdori ${order.amount}`);
      // AQShga xos soliq mantig'ini qo'llash
    } else {
      console.log(`Buyurtma ${order.id} qayta ishlanmoqda, miqdori ${order.amount}`);
    }
  }
}

processOrders(orders);

forEach: Iteratsiyaga Funksional Yondashuv

forEach massivlarda mavjud bo'lgan yuqori tartibli funksiya bo'lib, u iteratsiya qilishning yanada ixcham va funksional usulini taqdim etadi. U har bir massiv elementi uchun bir marta taqdim etilgan funksiyani bajaradi.

Sintaksis va Foydalanish

forEach sintaksisi quyidagicha:


array.forEach(function(element, index, array) {
  // Har bir element uchun bajariladigan kod
  console.log(element, index, array);
});

Qayta chaqiruv funksiyasi uchta argumentni oladi:

Unumdorlik Xususiyatlari

forEach odatda for loopidan sekinroq ishlaydi. Buning sababi, forEach har bir element uchun funksiyani chaqirish qo'shimcha xarajatlarini o'z ichiga oladi, bu esa bajarilish vaqtini oshiradi. Biroq, kichikroq massivlar uchun farq sezilmas bo'lishi mumkin.

Asosiy afzalliklari:

Asosiy kamchiliklari:

Misol: Turli mintaqalardagi sanalarni formatlash

Tasavvur qiling, sizda standart formatdagi sanalar massivi bor va ularni turli mintaqaviy afzalliklarga ko'ra formatlashingiz kerak.


const dates = [
  '2024-01-15',
  '2023-12-24',
  '2024-02-01'
];

function formatDate(dateString, locale) {
  const date = new Date(dateString);
  return date.toLocaleDateString(locale);
}

function formatDates(dates, locale) {
  dates.forEach(dateString => {
    const formattedDate = formatDate(dateString, locale);
    console.log(`Formatlangan sana (${locale}): ${formattedDate}`);
  });
}

formatDates(dates, 'en-US'); // AQSh formati
formatDates(dates, 'en-GB'); // Buyuk Britaniya formati
formatDates(dates, 'de-DE'); // Germaniya formati

map: Massivlarni O'zgartirish

map massivlarni o'zgartirish uchun mo'ljallangan yana bir yuqori tartibli funksiyadir. U asl massivning har bir elementiga taqdim etilgan funksiyani qo'llash orqali yangi massiv yaratadi.

Sintaksis va Foydalanish

map ning sintaksisi forEach ga o'xshaydi:


const newArray = array.map(function(element, index, array) {
  // Har bir elementni o'zgartirish uchun kod
  return transformedElement;
});

Qayta chaqiruv funksiyasi ham forEach kabi uchta argumentni (element, index, va array) oladi, lekin u qiymat qaytarishi shart, bu qiymat yangi massivdagi mos element bo'ladi.

Unumdorlik Xususiyatlari

forEach kabi, map ham odatda funksiya chaqiruvi qo'shimcha xarajatlari tufayli for loopidan sekinroq ishlaydi. Bundan tashqari, map yangi massiv yaratadi, bu esa ko'proq xotira sarflashi mumkin. Biroq, massivni o'zgartirishni talab qiladigan operatsiyalar uchun map for loop yordamida qo'lda yangi massiv yaratishdan ko'ra samaraliroq bo'lishi mumkin.

Asosiy afzalliklari:

Asosiy kamchiliklari:

Misol: Turli mamlakatlarning valyutalarini AQSh dollariga o'tkazish

Faraz qiling, sizda turli valyutalardagi tranzaksiyalar massivi bor va ularning barchasini hisobot uchun AQSh dollariga o'tkazishingiz kerak.


const transactions = [
  { id: 1, currency: 'EUR', amount: 100 },
  { id: 2, currency: 'GBP', amount: 50 },
  { id: 3, currency: 'JPY', amount: 7500 },
  { id: 4, currency: 'CAD', amount: 120 }
];

const exchangeRates = {
  'EUR': 1.10, // Misol uchun valyuta kursi
  'GBP': 1.25,
  'JPY': 0.007,
  'CAD': 0.75
};

function convertToUSD(transaction) {
  const rate = exchangeRates[transaction.currency];
  if (rate) {
    return transaction.amount * rate;
  } else {
    return null; // Konvertatsiya muvaffaqiyatsizligini bildirish
  }
}

const usdAmounts = transactions.map(transaction => convertToUSD(transaction));

console.log(usdAmounts);

Unumdorlikni O'lchash (Benchmarking)

Ushbu metodlarning unumdorligini obyektiv ravishda taqqoslash uchun biz JavaScript'dagi console.time() va console.timeEnd() kabi benchmarking vositalaridan yoki maxsus benchmarking kutubxonalaridan foydalanishimiz mumkin. Mana oddiy misol:


const arraySize = 100000;
const largeArray = Array.from({ length: arraySize }, (_, i) => i + 1);

// For loop
console.time('For loop');
for (let i = 0; i < largeArray.length; i++) {
  // Biror amal bajarish
  largeArray[i] * 2;
}
console.timeEnd('For loop');

// forEach
console.time('forEach');
largeArray.forEach(element => {
  // Biror amal bajarish
  element * 2;
});
console.timeEnd('forEach');

// Map
console.time('Map');
largeArray.map(element => {
  // Biror amal bajarish
  return element * 2;
});
console.timeEnd('Map');

Kutilayotgan Natijalar:

Ko'pgina hollarda siz quyidagi unumdorlik tartibini kuzatasiz (eng tezdan eng sekinga):

  1. for loop
  2. forEach
  3. map

Muhim Jihatlar:

Eng Yaxshi Amaliyotlar va Qo'llash Holatlari

To'g'ri iteratsiya usulini tanlash vazifangizning o'ziga xos talablariga bog'liq. Mana eng yaxshi amaliyotlar xulosasi:

Haqiqiy Hayotiy Ssenariylar va Misollar

Mana har bir iteratsiya usuli eng mos bo'lishi mumkin bo'lgan ba'zi haqiqiy hayotiy ssenariylar:

Asoslardan Tashqari: Boshqa Iteratsiya Metodlari

Ushbu maqola for loop, forEach va map ga qaratilgan bo'lsa-da, JavaScript o'ziga xos vaziyatlarda foydali bo'lishi mumkin bo'lgan boshqa iteratsiya usullarini taklif etadi:

Xulosa

JavaScript'da turli iteratsiya usullarining unumdorlik xususiyatlari va qo'llash holatlarini tushunish samarali va optimallashtirilgan kod yozish uchun zarurdir. Garchi for looplari odatda eng yaxshi unumdorlikni taklif qilsa-da, forEach va map ko'plab ssenariylar uchun mos keladigan ixchamroq va funksional alternativlarni taqdim etadi. Vazifangizning o'ziga xos talablarini diqqat bilan ko'rib chiqib, siz eng mos iteratsiya usulini tanlashingiz va JavaScript kodingizni unumdorlik va o'qilishi osonligi uchun optimallashtirishingiz mumkin.

Unumdorlik taxminlarini tekshirish uchun kodingizni benchmark qilishni va ilovangizning o'ziga xos kontekstiga qarab yondashuvingizni moslashtirishni unutmang. Eng yaxshi tanlov ma'lumotlar to'plamingiz hajmiga, bajariladigan operatsiyalar murakkabligiga va kodingizning umumiy maqsadlariga bog'liq bo'ladi.