Ի՞նչ եք կարծում, 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
-ի փոխարեն մենք հերթով հրում ենք մուտքերը: Վերցված ժամանակը տրված է ստորև:
Յուրաքանչյուրի համար պահանջվում էր ավելի քան երկու անգամ ավելի, քան ցիկլով անցկացված ժամանակը:
Երբ դուք գործ ունեք փոքր զանգվածի հետ, կարող եք ընտրել «Յուրաքանչյուրի» համար, քանի որ գրելը շատ ավելի պարզ է, և դրանք կատարողականի մեծ տարբերություն չունեն:
Ինչու են մարդիկ ընկնում յուրաքանչյուրի համար:
- յուրաքանչյուրի համար հեշտ է գրել: Օգտագործվում են հետ կանչելու գործառույթները:
- Ինդեքսային փոփոխական չի պահանջվում: Հետ կանչի գործառույթները կարող են ուղղակիորեն մուտք գործել արժեքներ մեկ առ մեկ:
- Մի քիչ ավելի մաքուր, քան օղակի համար:
Այն, ինչ նրանք մոռանում են յուրաքանչյուրի մոտ տեղափոխվելիս
- Կատարում: for loop-ը շարժիչի կողմից բնիկ եղանակ է, մինչդեռ forEach-ը տրամադրվում է Array օբյեկտի կողմից:
- Յուրաքանչյուրի համար կոտրելու միջոց չկա: Եթե ցանկանում եք դադարեցնել forEach ֆունկցիան, ապա պետք է բացառություն գցեք: Եվ դա այն չէ, ինչի համար նախատեսված են բացառություններ:
Եթե գործ ունեք փոքր զանգվածների հետ, կարող եք օգտագործել forEach
մեթոդը, բայց եթե գործ ունեք ավելի մեծ չափերի զանգվածների հետ, պետք է զգույշ լինեք: