Ի՞նչ եք կարծում, ES6 մեթոդը յուրաքանչյուրի համար կարող է փոխարինել հանգույցին:

JavaScript-ը հաճախորդի կողմից սկրիպտավորման լեզու է (մոռացեք Node.js-ը): Կոդ գրելիս մենք պետք է զգույշ լինենք, քանի որ մեր կոդը պետք է աշխատի բոլոր սարքերում, այլ ոչ թե պարզապես խաղային նոթբուքերի կամ MacBook-ների վրա: Մենք չպետք է մեծ բեռ տանք զննարկիչին։

ES6 a.k.a ES2015-ը ներկայացրեց բազմաթիվ առանձնահատկություններ, հատկապես զանգվածային գործառույթները forEach, map, filter և այլն: Շատերը կարծում են, որ յուրաքանչյուրը այլընտրանք է for օղակի համար: Դա ճի՞շտ է։ Եկեք ստուգենք որոշ փաստեր.

Նախքան սկսելը, եկեք ստուգենք, թե ինչն է օղակի համար և ինչն է յուրաքանչյուրի համար:

Loop-ի համար

For-ը հիմնաբառ է, որը ստեղծում է շրջադարձային հայտարարություններ, ճիշտ այնպես, ինչպես while և do…while: JS շարժիչը կարող է ուղղակիորեն հասկանալ, թե ինչ է դա:

Յուրաքանչյուրի համար

forEach-ը Array.prototype-ում սահմանված ֆունկցիա է, ինչպես բոլոր մյուս ֆունկցիաները: Շարժիչը չի կարող դա ուղղակիորեն հասկանալ: Այն գործարկելու համար պետք է ստանա ֆունկցիայի սահմանումը:

Յուրաքանչյուրի համար ընդդեմ յուրաքանչյուրի

Մեկը մյուսի փոխարեն ընտրելը մեծ ազդեցություն կունենա կատարողականի վրա: Երբ դուք պետք է գործ ունենաք ավելի մեծ չափերի զանգվածի հետ, կարևոր է ճիշտ ընտրելը:

Տեսնենք մի օրինակ ստորև.

//create an array with 100K entries
arr = [];
for(var i = 0; i < 100000; i++){
 arr.push(i);
}
//for loop
console.time("For Loop");
console.groupCollapsed();
for( i=0; i< arr.length; i++ ){
 console.log(arr[i]);
}
console.groupEnd();
console.timeEnd("For Loop");
//forEach
console.time("forEach");
console.groupCollapsed();
arr.forEach( x => console.log(x));
console.groupEnd();
console.timeEnd("forEach");

Վերոնշյալ կոդը կգրանցվի 1–100K կոնսոլում՝ ֆունկցիան կատարելու համար պահանջվող ժամանակի հետ միասին: Արդյունքը տրված է ստորև (6 Գբ Ram ունեցող նոութբուքի վրա)

forEach-ին ևս 6 վայրկյան պահանջվեց այն իրականացնելու համար: Վահանակով մուտք գործելը սովորաբար որոշ ժամանակ է պահանջում: Այսպիսով, 50+ վայրկյանը ողջամիտ է: Տեսնենք մեկ այլ օրինակ.

//initialize an array with 100K entries
arr = [], a = [], b = [];
for(var i = 0; i < 100000; i++){
 arr.push(i);
}
//for loop
console.time("For Loop");
console.groupCollapsed();
for( i=0; i< arr.length; i++ ){
 a.push(arr[i]);
}
console.groupEnd();
console.timeEnd("For Loop");
//forEach
console.time("forEach");
console.groupCollapsed();
arr.forEach( x => b.push(x));
console.groupEnd();
console.timeEnd("forEach");

Վերոնշյալը պարզապես պատճենելու է 100K գրառումների զանգվածը 2 այլ զանգվածներում: a=arr-ի և b=arr-ի փոխարեն մենք հերթով հրում ենք մուտքերը: Վերցված ժամանակը տրված է ստորև:

Յուրաքանչյուրի համար պահանջվում էր ավելի քան երկու անգամ ավելի, քան ցիկլով անցկացված ժամանակը:

Երբ դուք գործ ունեք փոքր զանգվածի հետ, կարող եք ընտրել «Յուրաքանչյուրի» համար, քանի որ գրելը շատ ավելի պարզ է, և դրանք կատարողականի մեծ տարբերություն չունեն:

Ինչու են մարդիկ ընկնում յուրաքանչյուրի համար:

  1. յուրաքանչյուրի համար հեշտ է գրել: Օգտագործվում են հետ կանչելու գործառույթները:
  2. Ինդեքսային փոփոխական չի պահանջվում: Հետ կանչի գործառույթները կարող են ուղղակիորեն մուտք գործել արժեքներ մեկ առ մեկ:
  3. Մի քիչ ավելի մաքուր, քան օղակի համար:

Այն, ինչ նրանք մոռանում են յուրաքանչյուրի մոտ տեղափոխվելիս

  1. Կատարում: for loop-ը շարժիչի կողմից բնիկ եղանակ է, մինչդեռ forEach-ը տրամադրվում է Array օբյեկտի կողմից:
  2. Յուրաքանչյուրի համար կոտրելու միջոց չկա: Եթե ​​ցանկանում եք դադարեցնել forEach ֆունկցիան, ապա պետք է բացառություն գցեք: Եվ դա այն չէ, ինչի համար նախատեսված են բացառություններ:

Եթե ​​գործ ունեք փոքր զանգվածների հետ, կարող եք օգտագործել forEach մեթոդը, բայց եթե գործ ունեք ավելի մեծ չափերի զանգվածների հետ, պետք է զգույշ լինեք: