JavaScript Loops - Code This, Not That

Поділитися
Вставка
  • Опубліковано 15 січ 2019
  • Learn all about JavaScript loops 🤹 and how to write code that maximizes performance and readability, while avoiding the bad stuff 💩. fireship.io/snippets/javascri...
  • Наука та технологія

КОМЕНТАРІ • 408

  • @IAmLesleh
    @IAmLesleh 5 років тому +477

    Iterating over an object can be done with:
    for(const [key, value] of Object.entries(obj))

    • @Fireship
      @Fireship  5 років тому +83

      Good call 👍

    • @ricardorien
      @ricardorien 4 роки тому +5

      Do you know wich extension he used for emojis and show the console in one line?

    • @ghjerrr
      @ghjerrr 4 роки тому +8

      Ricardo quokkajs quokkajs.com

    • @RocketTrolley
      @RocketTrolley 4 роки тому +6

      I often use destructuring as well like this in loops. It just simplified things

    • @RocketTrolley
      @RocketTrolley 4 роки тому +3

      Ricardo the tool you’re looking for is this quokkajs.com/ It’s called quokkajs

  • @hishammubarak3421
    @hishammubarak3421 5 років тому +611

    This guy can pack a whole semester into 8 minutes. Watching this video was worth every second, I wish you uploaded one of these every week.

    • @LOOTS243
      @LOOTS243 5 років тому

      🤑🤑

    • @hcmlopes
      @hcmlopes 5 років тому +12

      This is true. These videos are difficult to follow if you are new in the subject but if you are somewhat familiar with the topic they are great

    • @curiosdevcookie
      @curiosdevcookie 4 роки тому +5

      I agree wholeheartedly ❤️ I love learning, but the teacher is as important to the learning process as the knowledge itself, actually 🤔… teachers are more important because they are our tool (no offence intended!) to digest any kind of knowledge by best breaking that down from his or her perspective.
      Sometimes their style jives with their students’, sometimes not, sometimes even that is a learning/adapting process which can offer a lot in itself 😏😎
      I deeply admire his expertise in so many areas and his teaching style, and yes, emoticons are included for sure 😁🤗

    • @gbenga9811
      @gbenga9811 4 роки тому

      I couldn't agree more. He's so good at it.

    • @maguilecutty
      @maguilecutty 4 роки тому +2

      @@hcmlopes if you are new you should check out funfunfunction 's videos. Definitely a step before this and also really great teacher!

  • @amirhosseinrafiee2926
    @amirhosseinrafiee2926 5 років тому +176

    Your videos are by far the best resource on programming . Keep up the good work 👍🏻🙏🏻

  • @Fireship
    @Fireship  5 років тому +41

    RE 4:26 I was envisioning a long-running cpu intensive process as better suited for a compiled multi-threaded language. JS/Node is fast at basically every benchmark that matters, so didn't mean for that to come off the wrong way.

    • @olaorefouad2518
      @olaorefouad2518 5 років тому +2

      Hi, Jeff. I was going through fireship.io, and I found out that you used web components via angular, Hugo for static content and firebase
      My question is; can you recommend any set of materials for to learn web components and Hugo.
      Please reply.

    • @Fireship
      @Fireship  5 років тому +1

      @@olaorefouad2518 There is not much out there yet for WC. I made a video about "Advanced Angular Elements" recently that should be helpful if using Angular.

  • @carniattos
    @carniattos 5 років тому +29

    Even in basic videos like this I'm able to pick up some tips and tricks here and there. Magnificent work Jeff

    • @codeonmars579
      @codeonmars579 5 років тому

      ua-cam.com/video/rXZT-u5T1qQ/v-deo.html

  • @CaamSerenity
    @CaamSerenity 4 роки тому +75

    One thing you need to keep in mind when using sort() on array though: So is destructive, unlike map(), filter() or reduce(). It changes the original array and returns a reference to that original array, NOT creating a new one!

    • @CST1992
      @CST1992 4 роки тому

      That should be expected, shouldn't it?

    • @natew4724
      @natew4724 3 роки тому +6

      @@CST1992 Not necessarily, because sort also returns a reference to the array like map, filter, etc.

    • @theclockworkcadaver7025
      @theclockworkcadaver7025 3 роки тому +8

      @@natew4724 Yeah. Ideally, methods which mutate the original data should return void - especially helpful in TS.

  • @porgeet
    @porgeet 4 роки тому

    Loving these videos, so clear and concise. This pleases me.

  • @loveparmar1284
    @loveparmar1284 5 років тому +1

    0 dislike !! This is the power of great content. Thank you sir!! Love from India.

  • @Poohbify
    @Poohbify 5 років тому +1

    100% want more of this, please and thank you!a
    It's great!

  • @TheYuvelir
    @TheYuvelir 3 роки тому +23

    what extension did you used to show these results interactively ?

  • @markgemmell3769
    @markgemmell3769 3 роки тому

    Excellent videos amigo. Well done.
    It is funny how the good old for loop is the fastest and IMHO the most explicit and easy to understand. 😄

    • @everyhandletaken
      @everyhandletaken Рік тому

      It must depend on background, because all I see when I look at them is 1;-+++=>?#||.£ii j-x= 1
      I honestly have no comprehension how that is easier to read (and notice that someone made a typo), than ‘x of y’.
      I’m happy to take the performance hit, for readability for myself.
      Not saying you are wrong by any means, just that I see it much differently ☺️

  • @javascript_developer
    @javascript_developer 5 років тому

    Great. Every time I watch your videos I feels like I am noob. But your videos are really awesome advancing my current knowledge.

  • @christay9626
    @christay9626 5 років тому +7

    I like all of your videos; they're all presented very nicely compared to other programming videos on UA-cam. My only criticism is that the code is run through so quickly, so if you're a beginner its hard to keep up with what is going on...

  • @SprHero
    @SprHero 5 років тому +26

    For the early birds where the video doesn't load: set the quality to 360p and then click somewhere on the timeline to skip a few seconds (you can go back to the beginning afterwards).

    • @filipcoja
      @filipcoja 5 років тому +5

      Actually works, thanks!

    • @Fireship
      @Fireship  5 років тому +6

      Thank you Martijn! It won't even play for me.

    • @SprHero
      @SprHero 5 років тому +1

      @@Fireship No problem. I hope my quick solution worked for you as well. I enjoyed the video!

    • @valiok9880
      @valiok9880 5 років тому

      Is it because of youtube compression ?

    • @SprHero
      @SprHero 5 років тому +2

      @@valiok9880 I'm not an expert, but I think you're right. I think youtube only had the 360p version ready, but for some reason gave us the HD option (which was not available). After setting the quality to that lower setting, skipping a few seconds forced youtube to load in the 360p quality (which was actually available). This way, the video could play.

  • @hdorodev
    @hdorodev 5 років тому +87

    I always wonder how can you do so much, with so much quality, with your time 🤔
    A video on your creative process, recording and editor set-up and your overall philosophical take on life, work and code would be very much appreaciated! You're quite the interesting human being :D

    • @Fireship
      @Fireship  5 років тому +17

      Thanks for the unique suggestion. I will put all my tricks into a video one day. This sums up my philosophy on code fireship.io/mission/

    • @ChaoticNeutralMatt
      @ChaoticNeutralMatt 3 роки тому

      @@Fireship that was actually interesting

  • @khai96x
    @khai96x 5 років тому +2

    Callbacks of sort() are supposed to return a number (-1, 0, +1), not a boolean. So you should've used `a < b ? -1 : +1` instead of just `a < b`.

  • @saideepkonduri6429
    @saideepkonduri6429 5 років тому +1

    Awesome as always , background music is
    👌

  • @rushabhsheth5441
    @rushabhsheth5441 5 років тому +2

    I guess you must upload a complete big videos to master JavaScript for a mid user.
    This video was amazing keep the good work going !!

  • @sebbes333
    @sebbes333 3 роки тому +4

    You will ALWAYS get the best performance when you write "normal" code that the compiler will recognize, it is faster because the compiles does a LOT of optimizations that you probably never even have heard about, no mater how great coder you are.

  • @bgenp4f600
    @bgenp4f600 5 років тому

    Hey great content, i've watched around 5 videos now and i was subscribed after the first one. The pace is a bit too fast though, at least for me that is. But pausing and going back to fully understand is really worth it.

  • @muradeliyev6291
    @muradeliyev6291 4 роки тому

    these types of videos are my favorite. please do more)

  • @vishalphilip6705
    @vishalphilip6705 5 років тому

    We need more contents like this. 😍
    Performance Demo is lit 🔥

  • @rezguibahaeddinne1605
    @rezguibahaeddinne1605 5 років тому +2

    Just thank you so much, more please from this

  • @vidalroland
    @vidalroland 5 років тому +1

    Very good as always, Will be helpful to train

  • @kingbeencent
    @kingbeencent 4 роки тому

    I love your work dude!

  • @hnasr
    @hnasr 5 років тому

    Great work dude!

  • @kimdecastro6951
    @kimdecastro6951 5 років тому

    You explained it well bro! 🙏🏻

  • @TimleyDegreeIII
    @TimleyDegreeIII 5 років тому

    You improved me a lot.

  • @avatars24
    @avatars24 5 років тому +1

    thnx for all the videos You make

  • @enfieldli9296
    @enfieldli9296 2 роки тому

    The higher order function part is really conscise!

  • @amanimavu810
    @amanimavu810 5 років тому

    Awesome stuff man, thanks a lot

  • @pinkshortcomedy
    @pinkshortcomedy 3 роки тому

    Its so *easy* to *understand!* thi deserves the most *likes in the world*

  • @jashanbansal2613
    @jashanbansal2613 5 років тому +2

    Jeff! You are awesome :)

  • @perc-ai
    @perc-ai 5 років тому

    one of the best js array vids on the internet lol

  • @theatypicaldeveloper
    @theatypicaldeveloper Рік тому

    Old but gold!

  • @gerritweiermann79
    @gerritweiermann79 5 років тому +3

    I'm really loving your "Code This, Not That" series!
    You could have added generators because it's very similar to iterators ;)

  • @albert21994
    @albert21994 5 років тому

    outstanding quality

  • @JamieMcI
    @JamieMcI 5 років тому +75

    Much cleaner than my pooCount algorithms.

    • @Fireship
      @Fireship  5 років тому +10

      Gotta keep the pooCount code clean

    • @codeonmars579
      @codeonmars579 5 років тому

      ua-cam.com/video/rXZT-u5T1qQ/v-deo.html

  • @RyanSmith-rb1ch
    @RyanSmith-rb1ch Рік тому

    Good video. More please.

  • @justinjoker8060
    @justinjoker8060 2 роки тому

    so awesome channel. thanks bro

  • @djpunisha29
    @djpunisha29 5 років тому +6

    p.s. I subscribed and smashed that notification bell :)

  • @williaamlarsson
    @williaamlarsson 3 роки тому

    So much of this is similar to Haskell, I love it😍

  • @vlad981
    @vlad981 5 років тому +5

    Btw, property order in object are also guaranteed to be chronological by ES6 specs.

    • @Fireship
      @Fireship  5 років тому +3

      Good call. It's only guaranteed in certain cases, right? I don't think the for-in loop would be ordered in ES6

    • @vlad981
      @vlad981 5 років тому +1

      If I understand it correctly - it must be guaranteed - 2ality.com/2015/10/property-traversal-order-es6.html

  • @HaiVu
    @HaiVu 4 роки тому +1

    On NodeJS (latest at time of writing, on Ubuntu 19), for(let i = 0; i < ...) and for(x of y) and forEach() all gave roughly the same execution time, for a large array (1 million objs).

  • @pguti778
    @pguti778 3 роки тому

    Yes, more videos!!!

  • @himynameisoleg
    @himynameisoleg 4 роки тому

    Oh snap, finally an Array.reduce example that makes sense!

  • @shreerangvaidya9264
    @shreerangvaidya9264 4 роки тому

    Subbed instantly.

  • @Nebrass_
    @Nebrass_ 3 роки тому

    I respect you man

  • @mvvbuch
    @mvvbuch 5 років тому

    Nice vid!

  • @SlingShotKid007
    @SlingShotKid007 5 років тому

    The quality of the production of these videos is fantastic, what kind of tools do you use for video editing, making the first emoji appear, etc?

    • @ricardorien
      @ricardorien 4 роки тому

      You already know wich extension is? form emojis.

  • @niclasj2871
    @niclasj2871 5 років тому +1

    Nice video
    Something about the firebase admin sdk would be nice

  • @bencavenagh1036
    @bencavenagh1036 4 роки тому +16

    What is that plugin for displaying the console logs in the IDE? I would love that

    • @LuDaley
      @LuDaley 4 роки тому +7

      It's probably the Quokka plugin(quokkajs.com/docs/). Made by the wallaby.js folks. I found it recently. I think it changed my life. Enjoy

    • @loobakaer2
      @loobakaer2 3 роки тому +1

      @@LuDaley And on this day sir, you've changed mine.

    • @victorlongon
      @victorlongon 2 роки тому

      It is Quokka, wallaby uses it under the hood

  • @loekaars
    @loekaars 5 років тому +2

    What extension / theme are you using for the green squares on edited lines?
    Edit: also how are you getting live console.log() output at the end of lines?

  • @perfect.stealth
    @perfect.stealth 3 роки тому

    Why did i laugh at the spinning JS logo? I felt it was screaming event loop in my face 😂

  • @The_Ghost_In_Heaven
    @The_Ghost_In_Heaven 5 років тому +4

    What editor are you using?

  • @AbadiyTalaba
    @AbadiyTalaba 3 роки тому

    *Holy shit was this useful😱😱😱, and definitely worth watching about a million times till I get every single word into my mind🤖😍😍😍!*

  • @guillermocava3568
    @guillermocava3568 5 років тому

    Straight fire

  • @_rathankumar
    @_rathankumar 5 років тому +1

    Nice content, is there any place where I can see your vscode setup?

  • @shellwhale8994
    @shellwhale8994 4 роки тому +1

    What plugin do you use to show directly in the editor the console.log() output ?

  • @anticom1337
    @anticom1337 5 років тому +12

    Hey Jeff, no offense but although this sort of content is important to understand and learn about i subbed to this channel for some more advanced topics. Don't get me wrong it's a great videos for newbies to js. Can you mark such videos as "basic" or "essentials" next time so it's easier to identify? Maybe possibly even adding intermediate and advanced tags to your videos might help out others to quickly grasp what skill level the video is suited for :)
    That being said keep up the good work sir!

    • @Fireship
      @Fireship  5 років тому +5

      I hear you and advanced content is mostly what you will see on this channel. When you see "code this, not that" it will probably be pretty basic. I hope to do these quick basic videos every couple weeks.

    • @ihababdelbassetannaki6871
      @ihababdelbassetannaki6871 5 років тому

      @@Fireship keep it for those who wanna embrace the JS Path, poeple do not born JS developers.I've been following your videos and I released that I have an advanced knowledge about JS , TS and different TSJS librairies,yet I was writing bullshit and I'm ashamed to call my code a code ... coz I was always like meh basics

  • @qazyhn94
    @qazyhn94 5 років тому

    Nice video thank you for

  • @nicholasbazzoni7084
    @nicholasbazzoni7084 2 роки тому

    awesome video

  • @Atmos41
    @Atmos41 2 роки тому +1

    After extensive performance tests, I can assert that forEach is now performing extremely good (even better than a standard 'for' loop)

    • @Rudxain
      @Rudxain 2 роки тому

      That's expected. Many new methods and syntax are slow at first, but when months pass by, the engine devs have already optimized most part of it

  • @jbraat
    @jbraat 5 років тому +3

    I really enjoy your videos. I think they are very well put together and do have a lot of substance. However in my perspective the mindset of "it's really only concerned when every nanosecond counts and that point you might want to consider something other than javascript" (4:21) is not very good to have at all. If you do this a million times in your application it will still make it slower. Just because it does not matter in this one isolated instance and because "it's just javascript" does not mean, you should do it, if there is a better option (given you have the time and knowledge to optimize your code). We should always strive for the best possible solution to a problem (time, money, etc. are obviously factors to consider). That is at least my take on it.

    • @Fireship
      @Fireship  5 років тому +1

      Yeah I actually regret that line now. It came off as JS is "slow" when that's not really fair. Bad code makes things slow, not the language.

    • @pepkin88
      @pepkin88 Рік тому

      > "does not mean, you should do it, if there is a better option (given you have the time and knowledge to optimize your code)"
      Most of the time, readability is the better option, not chasing minimal performance gains. Also, beware of premature optimization.

  • @ShrinivasKattimani66
    @ShrinivasKattimani66 4 роки тому

    Thank you.

  • @maiconm
    @maiconm 5 років тому +1

    Great video! How do you make these emojis?

  • @alexnicaise8655
    @alexnicaise8655 5 років тому +1

    Love your videos, gotta put it on slow mode tho; you talk so fast!

  • @nickysalazar1418
    @nickysalazar1418 4 роки тому

    Excellent video, how do you do it? what program do you use

  • @vambach
    @vambach 4 роки тому

    What is the vs theme that you use ? Also the configurations like plugins you have used. I like them.

  • @kld0093
    @kld0093 5 років тому +2

    ever since i learned js, I used for( in ) and i thought its equivalent to forEach (i probably didn't pay attention on tutorials). Every time i'd use for ( in ) for an array, i'd get indexes and like wtf why is javascript doing this? now I know! Thank YOU

    • @Fireship
      @Fireship  5 років тому +1

      It is confusing and I still mix them up after doing it a million times.

    • @Fireship
      @Fireship  5 років тому +1

      @@darkopz good points, I actually mentioned the foreach issue in my async/await video. There are some gotchas in js when you use it's syntatic sugar, that's why linters are so important

    • @kld0093
      @kld0093 5 років тому

      @@darkopz thanks for the advice!

  • @Muaddibkhan
    @Muaddibkhan 5 років тому +1

    Great video, you should do these kind of videos more often .

  • @remotetechie6910
    @remotetechie6910 4 роки тому

    Video quality is unreal. Would be awesome to see data structs / algo.

  • @LazyGod840
    @LazyGod840 5 років тому +6

    3:33 I wouldn't use Array() to test performance, because you create array that has 1 mil items of "empty". Uder the hood it works with array, that can have empty items in it (called holey array) and it has to check more things when using map, forEach etc. (not sure if it affects for loop too). It is better to just create array with [] and push items into the array. Then you may get more realistic times.
    I don't know how much different would it be, but if you need performance, this is the way to go (at least for V8 engine). I would say it is also more realistic usage in general than creating array using Array() with specified number of items. :)

  • @acqzuel
    @acqzuel 4 роки тому

    do you also do the graphics and motion design for your videos? or do you have a team or collaborator?

  • @CST1992
    @CST1992 4 роки тому

    Also, slice and splice could be used to create a new Array from an existing one, if you're wanting to avoid mutating the existing one.

    • @domuuuuu
      @domuuuuu 4 роки тому

      .splice() mutates, .slice() doesn't (returns a new array).

  • @NitinKatiyarCircle
    @NitinKatiyarCircle 5 років тому

    First tutoring where i am watching it in 1x.

  • @botdamian5688
    @botdamian5688 3 роки тому +3

    Keep in mind that only the normal for loop allows you to break or continue the loop.

    • @CorrectMyGrammarPls
      @CorrectMyGrammarPls 8 місяців тому

      You can use return as a continue inside the function "loops", you cant break at all tho

  • @semikolon4229
    @semikolon4229 5 років тому

    Thanks bro

  • @RobertWildling
    @RobertWildling 4 роки тому

    Since you use emojis so often, would there be any chance to do a video about those? E.g. the unicode space, how to insert them in VScode, your most favoured usecases...?

  • @microwavekonijn
    @microwavekonijn 4 роки тому +3

    The for of loop and the default for loop have similar performance. Your comparison is wrong as the default for loop never access the elements in the array. Add something like "arr[i];" in the body and you will get similar performance. The for loop you are showing should be compared to the for in loop, which has worse performance. But that doesn't mean you shouldn't use it as it is really useful when iterating over keys in an object.
    Other than that great video.

  • @MercyFromOverwatch2
    @MercyFromOverwatch2 2 роки тому

    Jeff is still my favourite tech youtuber

  • @kubikaugustyn
    @kubikaugustyn 3 місяці тому

    Don't forget that JavaScript provides a generator function, in which you can use the "yield" keyword. You can use that in a for...of loop

  • @TheCompleteGuitarist
    @TheCompleteGuitarist 4 роки тому

    As I am writing some javascript loops I came out of curiosity, the saliva is now drooling over my chin and forming a pool at my feet and my motor neuron skills are pre stone age, I typed this with single fist strikes left then right then left etc. I am off to cry myself to sleep.
    Fortunately I wrote my scripts before watching this video.

  • @Aice-rj1wz
    @Aice-rj1wz 5 місяців тому

    thanks bro

  • @dogesamich104
    @dogesamich104 4 роки тому +1

    6:52 isPoopy? These are the important questions a doge needs to know.

  •  4 роки тому

    What extension do you use which shows you the value of variables and errors at the end of the lines?

  • @umka7873
    @umka7873 5 років тому +1

    Jeff, what the music played? Tell me pls

  •  4 роки тому

    what extension do you use to preview the console output and the variable value on hover?

  • @Punky_Brewmeister
    @Punky_Brewmeister 4 роки тому

    Is there a certain extension you are using that shows the text out to the right of your code that evaluates the line?

  • @Daw588
    @Daw588 5 років тому +2

    What theme you using in Visual Studio VS Code?

    • @LazyGod840
      @LazyGod840 5 років тому

      I'd guess it's the same theme that I use and it's called One Dark Pro.

  • @Crimson.X3
    @Crimson.X3 Рік тому

    Piola 😎👍

  • @itsnobledean9450
    @itsnobledean9450 9 місяців тому

    Videos like this is the reason I may be looking to fork up the $400 for his pro member plan. The way he explains has helped me understand many topics in web development. I'm thinking hard on spending the money.

  • @sam.0021
    @sam.0021 5 років тому

    which extension do you use for those sick green boxes?
    also, how did you type that blue (i assume commented) text just on the screen? was it video editing or another extension?

    • @Fireship
      @Fireship  5 років тому +1

      It's all via Quokka, they also make a nice test runner called Wallaby.

    • @sam.0021
      @sam.0021 5 років тому

      Fireship - AngularFirebase awesome thanks!

  • @boyemarc-antoine7027
    @boyemarc-antoine7027 3 роки тому

    great work anyway

  • @boyemarc-antoine7027
    @boyemarc-antoine7027 3 роки тому

    learning so much new way to iterate that im asking myself: is it worth to learn of all those stuff cause they are not more efficient than the older lol waisting time to learn stuff only usable in JS where usual loopin way work same or better

  • @leguminosa9
    @leguminosa9 3 роки тому

    what do you use? the compiler / plugin that has red and green thingy on the side, etc

  • @NitinVarmaManthena
    @NitinVarmaManthena 3 роки тому

    What plug-in are you using to display the in line debugger values?

  • @hazemgharib
    @hazemgharib 5 років тому +3

    What kind of extension you are using for VS Code to display instant JS interpretation like that?

    • @ndcouch
      @ndcouch 5 років тому +6

      Quokka.js extension

    • @hazemgharib
      @hazemgharib 5 років тому

      @ndcouch Bless you man!

    • @ndcouch
      @ndcouch 5 років тому +1

      @@hazemgharib np buddy!

  • @rainmansyc7869
    @rainmansyc7869 5 років тому

    Awesome video! I am wondering which plugin did you use for showing console log output inline right next to the log function?

    • @GhostlyDilemma
      @GhostlyDilemma 5 років тому

      Ever found it?

    • @rainmansyc7869
      @rainmansyc7869 5 років тому

      @@GhostlyDilemma nope, still looking for it

    • @GhostlyDilemma
      @GhostlyDilemma 5 років тому +1

      Googled a few minutes and found Quokka.js which looks pretty much like the one used in the video, hope I could help :3

    • @rainmansyc7869
      @rainmansyc7869 5 років тому

      @@GhostlyDilemma I believe that's exactly what he was using in the video. Thanks a lot for letting know!

  • @kno3754
    @kno3754 5 років тому

    0:22 Hey Vsauce my name Jeff