8 Must Know JavaScript Array Methods

Поделиться
HTML-код
  • Опубликовано: 30 сен 2024

Комментарии • 860

  • @pritiroy6849
    @pritiroy6849 5 лет назад +569

    I wish more people made tutorials like you.
    Clean , Short , Simple.
    subscribed , hoping for great content in the future.

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +38

      Thank you so much! I'm really glad you resonate so well with my teaching style.

    • @ThatGuyDownInThe
      @ThatGuyDownInThe 4 года назад +7

      All these dudes are getting a pay day when I land my first job soon

    • @shlomoh.6148
      @shlomoh.6148 3 года назад +3

      additionally no 5 minutes "please subscribe" introduction

    • @l.e.nichols9382
      @l.e.nichols9382 3 года назад

      Agreed

    • @arshadchowdhury5939
      @arshadchowdhury5939 2 года назад +1

      @@ThatGuyDownInThe Did you get the job ? where's the pay day waiting for it mate

  • @seenuvasanv
    @seenuvasanv 5 лет назад +854

    Filter - 0:22
    Map - 2:00
    Find - 2:55
    Foreach - 3:43
    Some - 4:32
    Every - 5:53
    Reduce - 6:28
    Includes - 8:52

  • @hnasr
    @hnasr 5 лет назад +111

    Crisp video and right to the point!

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +9

      Thank you. I'm glad you enjoyed it.

    • @KSmith-md7po
      @KSmith-md7po 3 года назад

      @@WebDevSimplified By the way he's a great Backend Engineer :D

    • @yashlearnscode5502
      @yashlearnscode5502 3 года назад +1

      @@KSmith-md7po ah, yes, the two greats of the RUclips tech world saying hi. :)

    • @michaelcarnevale5620
      @michaelcarnevale5620 3 года назад

      @@WebDevSimplified ya u waste zero time, great reference material

    • @rassoulsaliou9950
      @rassoulsaliou9950 3 года назад

      @@yashlearnscode5502 1M101¹

  • @vadasdaweewa9036
    @vadasdaweewa9036 5 лет назад +91

    Superb explanations. Wish your channel to grow, you deserve it.

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +7

      Thank you! I already feel like I have grown so much.

  • @EduBasabe
    @EduBasabe 5 лет назад +90

    This is the most simple, short, good quality and well explained tutorial I have ever seen.

  • @liorocker1
    @liorocker1 5 лет назад +328

    Wow, the best 10 minutes used to learn how to deal with arrays, Thanks a lot :)

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +10

      You're welcome!

    • @averian3191
      @averian3191 5 лет назад +4

      I'm new to javascript and the guys at work were paying me out for using for loops. This was very helpful.

    • @randompal9828
      @randompal9828 5 лет назад

      Check out lodash for similar tricks, although than one is a library

    • @AyomideIruobe
      @AyomideIruobe 4 года назад +1

      Please view my short funny vid on arrays ruclips.net/video/LEKx0L4ukhs/видео.html

    • @vinubox
      @vinubox 4 года назад +1

      Yeah, not a single second wasted !

  • @LaChRiZ2k
    @LaChRiZ2k 4 года назад +76

    For C# developers, who know LINQ:
    filter == Where()
    map == Select()
    find == FirstOrDefault()
    some == Any()
    every == All()
    reduce == Aggregate()
    includes == Contains()
    you're welcome.

    • @petazeta76
      @petazeta76 3 года назад +1

      it is includes not include

    • @blasm1713
      @blasm1713 3 года назад +3

      Name methods in js are much more natural

    • @slashd
      @slashd 2 года назад +2

      The C# names are much better!

  • @EAGEEYE321
    @EAGEEYE321 4 года назад +19

    you look like a model

  • @cswalker21
    @cswalker21 4 года назад +16

    Hello, I'm getting back into web development after a 20+ year absence, and it's pretty scary because everything is so different! Your channel has been a big help. Thank you so much for your clear explanations and tight presentation. Very valuable!

    • @anselmleo4146
      @anselmleo4146 4 года назад +4

      20+years ago.. what we had was more like web design.. but i feel you bro.. welcome back🤗

  • @devanshtyagi1403
    @devanshtyagi1403 5 лет назад +111

    When reduce confuses you so much that you start calling parameters methods 😂

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +31

      Lol. My brain can only handle so much :P

    • @johnmadsen37
      @johnmadsen37 5 лет назад +1

      its a but map / reduce usage - not the example provided. but the map reduce concept would be understood first and this is beyond most scripters.

  • @javascriptmastery
    @javascriptmastery 5 лет назад +6

    I was just planning on creating a video about array methods! Nice one! :)

  • @deansprivatearchive
    @deansprivatearchive 3 года назад +2

    "Array.filter?!?" "Array.filter?!?" "ARRAY.FILTER?!?"

  • @davidalexander8786
    @davidalexander8786 4 года назад +8

    U can use reduce to consume an array of promises step by step
    await [1, 2, 3, 4].reduce(async (prevPromise, nextValue) => {
    await prevPromise;
    return new Promise((resolve, reject) => {
    setTimeout(() => {
    console.log('nextValue', nextValue)
    resolve()
    }, 200)
    })
    }, Promise.resolve())

  • @TheAdel136
    @TheAdel136 3 года назад +2

    You forget the sort() methode which is very useful

  • @jerryjeremy4038
    @jerryjeremy4038 5 лет назад +8

    This guys needs only 10 minutes to discuss this awesome topic but in school it will take 1 whole week.

  • @jthomasaurus
    @jthomasaurus 5 лет назад +11

    I watched a few videos of yours and was quickly convinced. I’m subscribed to your channel, your news letter, and checked out your “appearance” on the How to Code Well podcast.
    Really like your quick and to-the-point style of teaching, and you move quickly so I don’t get bored at all. I can always pause if I need to, but so many channels move too slowly.
    Thanks for all the help!

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +5

      Thank you so much! I spend a lot of time trying to make sure my pace of explanation is a good mix of quick without being too fast. I generally live by the principle of explaining something really well once and then moving on since it is a video and not a live lecture you can always pause or rewind like you mentioned.

  • @agatamaria5569
    @agatamaria5569 4 года назад +8

    It's probably incalculable how much time and mind power this video has saved me. I am so glad I came across it. Hero! Thank you :)

  • @true_visual
    @true_visual Год назад +8

    No fluff, straight to the point! I really thank you for this video!

  • @baatar
    @baatar 5 лет назад +30

    Thank you, may the student teach the master a useful tip?
    console.table() instead of console.log()

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +22

      I always forget about the amazing logging features of console. I really need to be more mindful of them when coding.

  • @senthilkumaripaulsami5737
    @senthilkumaripaulsami5737 4 года назад +10

    Best video ever. Simple, easy to understand. Effective presentation. Looking forward to more videos.
    Been binge watching your videos.
    Thanks a ton..

  • @irenazlo5173
    @irenazlo5173 2 года назад +26

    This tutorial has more knowledge than many 1hour+ tutorial videos. Well done!

  • @sivakumarg98
    @sivakumarg98 4 года назад +13

    The two great channels where I learned everything, web dev simplified & Traversy media
    .
    🤘

    • @xeonace
      @xeonace 4 года назад

      Brad is a beast

    • @Snoo29293
      @Snoo29293 3 года назад +1

      Steven Griffith is a very good RUclipsr too, he has videos about almost anything you could think of in JavaScript, web dev simplified does help a lot, but sadly there few stuff he hasn't covered about JavaScript in his videos, and sometimes he simplifies things a lot, which is good if you are struggling to understand something, but some concepts is good to know a little deeper. I recommend watching web dev simplified as an introduction to a topic, and then searching the concept deeper by watching some other videos, like the videos Steven Griffith makes, except if the concept is already simple enough and doesn't have much else to learn, like the array methods we were taught in this video, there do are some stuff he didn't talk about, about reduce method for example I believe it also can take a third parameter, but this video pretty much covered everything about these array methods.

  • @derickmoncado
    @derickmoncado 3 года назад +1

    const items = [
    { name: 'Bike', price: 100 },
    { name: 'TV', price: 200 },
    { name: 'Album', price: 10 },
    { name: 'Book', price: 5 },
    { name: 'Phone', price: 500 },
    { name: 'Computer', price: 1000 },
    { name: 'Keyboard', price: 25 }
    ];

  • @alberts6096
    @alberts6096 5 лет назад +12

    Thanks, very well made video: audio video letters size 10/10, could you make a similiar video about objects? Or general video about objects and object constructor, with same example shopping cart. Reducing items in object, like in real life when item is reduced on the shelf.

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +3

      Thank you very much for the compliment!
      I do have plans to create some videos about object oriented programming in the future but it sounds like you are more interested in the functionality of a database. I am actually in the process of creating a course that will cover the exact use case you are talking about, except not for a shopping cart. It will be released on my channel for free at the beginning of March hopefully. If you want to see a demo checkout my Twitter @DevSimplified to see a short teaser video of the project.

    • @alberts6096
      @alberts6096 5 лет назад

      @@WebDevSimplified Thanks looking forward.

  • @S0m0neRand0m
    @S0m0neRand0m 3 года назад +4

    Dang, if I had had the smarts of typing my problem into RUclips a couple hours earlier... you saved me dude! (just starting this JS journey)

  • @utkarshpant5297
    @utkarshpant5297 Год назад +2

    Finally someone explained reduced() simply

  • @user-ff3su7rf6b
    @user-ff3su7rf6b 3 месяца назад +1

    Thx from Ukraine. You explain clearly, and even I understood

  • @serhatbekk
    @serhatbekk 4 года назад +7

    I've just found your channel and you're a great teacher! Thank you for sharing your knowledge. Thanks to you, now things started to get clearer! :)

  • @aseel1024
    @aseel1024 5 лет назад +7

    thx bro, BTW in arrow function u don't have to write return and open bracket if u have one return.
    example:
    let i = (el) => el + 10;

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +9

      Correct. I generally keep those types of statements on one line, but in a video with my font so large I usually break things onto multiple lines to make it easier to read.

    • @saeedatenzi
      @saeedatenzi 5 лет назад +2

      It is a best practice

    • @harag9
      @harag9 4 года назад

      It's best practice to bracket them and put a return statement in there, makes it much easier to read.

  • @clevermissfox
    @clevermissfox 10 месяцев назад +1

    Hoping I can get some clarity on how to solve todays Javascriptmas. Array of names, you have to match every name with a partner and can’t be themselves.

  • @AdamBowersDeveloper
    @AdamBowersDeveloper 5 лет назад +5

    Reduce is definitely my favourite Array method.

  • @digitalkov
    @digitalkov 3 года назад +2

    You are the best!
    Concise, no bs, no nonsense.
    Please don't change.
    And please don't add any silly bs in parenthesis like (as this, or as that...)

  • @alexp-ru
    @alexp-ru 4 года назад +3

    "use strict"
    Seriously, your videos are good, but for f's sakes, use strict, newbies are watching and whatever code you're writing isn't gonna minify, among other problems. Semicolons in JS are NOT optional.

  • @GorillaDev417
    @GorillaDev417 5 лет назад +4

    And another one (in my DJ Khaled voice)! Thanks for the awesome videos man! Super helpful.

  • @carltongordon
    @carltongordon 5 лет назад +6

    DUDE!!!!! you cleared up soooo much for me, thank you man

  • @Qrexx1
    @Qrexx1 Год назад +4

    Very useful summary!
    But keep in mind that with the forEach method you don't have the option to skip an element or to break the loop, in those cases you still need the 'for' loop or the 'for...of' loop so you can use the 'continue' or 'break' keywords.

  • @IsaacOladimeji
    @IsaacOladimeji 4 месяца назад +1

    Simple, but yet so accurate, and easy to understand!!👌

  • @karvan101
    @karvan101 3 года назад +3

    We can also write the above with arrow function like this:
    const total = items.reduce((currentTotal, item) => item.price + currentTotal , 0)
    0: is no the start index but the value for currentTotal very first time.

  • @foxjonesofficial
    @foxjonesofficial 3 года назад +1

    When you said “items.some” I thought you said “items.sum”

  • @DavidWoodMusic
    @DavidWoodMusic 5 лет назад +4

    My word thank you for showing this with multiple-property objects.
    Everyone does it with zero-property objects.
    You sir earned a sub 26 seconds into this video.

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +1

      That may be a RUclips record :P
      I'm really glad you enjoyed the video.

  • @dannysehn3979
    @dannysehn3979 4 года назад +3

    I was seriously thinking of the number 7 during your "includes" section :O

  • @elp1291
    @elp1291 5 лет назад +25

    important : filter, find and includes do not work on IE11

    • @stefanms8803
      @stefanms8803 5 лет назад +10

      good! let it die

    • @elp1291
      @elp1291 5 лет назад +2

      @@stefanms8803 I wish it was already dead, sadly in some cases you'll have to deal with it...

    • @unchartouille1208
      @unchartouille1208 4 года назад +3

      If IE was a tree I would burn it. If it was a house I would destroy it. If it was a gift I would put it to the trash, I would destroy it and burn it.

    • @elp1291
      @elp1291 4 года назад +2

      @@unchartouille1208 Oh I would to. Reality (and big firms) just make sure the tree/house/gift stays up anyway...

    • @felipefs106
      @felipefs106 4 года назад +2

      I think it’s important to point this out, some clients still want their web apps to work on IE 11. Hopefully there is a polyfill to make them work

  • @cr7forever7877
    @cr7forever7877 2 года назад +1

    what keyboard and what switches do you use????

  • @mehmetdemir-lf2vm
    @mehmetdemir-lf2vm 3 года назад +2

    4:25 there is a short notation of "for" for that purpose: for(let item in items){console.log(item.price)}
    10:00 reduce is confusing and completely unnecessary. write the following instead: let total=0;for(let item in items)total+=item.price;

  • @abhay2192
    @abhay2192 2 года назад +1

    Make a video on some best react Api.🥺🥺😉

  • @portreemathstutor
    @portreemathstutor 4 года назад +1

    I couldn't work out how to get the information out of the array. Then I tried
    making an html paragraph with id="demo" and then used
    document.getElementById("demo1").innerHTML =items[0].price;
    It's only blindingly obvious if you already know.

  • @bmac-cz6rk
    @bmac-cz6rk 3 года назад +3

    I swear this guy explains things better than anyone else on the planet

  • @samalhabash2116
    @samalhabash2116 4 года назад +2

    The reduce method has been confusing me for a little bit as a is newbie. The way you explained it made so much sense! Thank you so much.

  • @SiNevesh
    @SiNevesh Год назад +2

    Can't say how much I appreciate these videos. Straight-forward, simple, and most importantly, useful!

  • @projetoventura
    @projetoventura 3 года назад

    const items = [
    {name: 'Bike' , price:100 },
    {name: 'Tv' , price: 200},
    {name: 'Album' , price: 10},
    {name: 'Book' , price:5 },
    {name: 'Phone' , price: 500},
    {name: 'Computer' , price:1000 },
    {name: 'Keyboard' , price:25 },
    ]

  • @ChandraPrakash-vq4re
    @ChandraPrakash-vq4re 3 года назад +1

    Thanks for the summarize the array

  • @sn66410
    @sn66410 4 года назад +1

    Channel name is infinity% justified

  • @SumitKumar-co2pm
    @SumitKumar-co2pm 5 лет назад +1

    Gem of a video man. Thanks a really lot

  • @candi2Love
    @candi2Love 3 года назад +1

    thanks for using this font size!

  • @jagdishshetty4782
    @jagdishshetty4782 5 лет назад +3

    Excellent !!! Each of your videos is answering many of the questions that I have in such a short time !!!! Thx and keep it up !!!

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад

      Thank you. I am glad you enjoy my videos. Hopefully my future videos are just as helpful.

  • @ryandavid739
    @ryandavid739 5 лет назад +3

    Cute, smart, and a good teacher.

  • @sergiolaguardia4329
    @sergiolaguardia4329 2 года назад

    const items = [
    { name: "Bike", price: 100 },
    { name: "TV", price: 200 },
    { name: "Album", price: 10 },
    { name: "Book", price: 5 },
    { name: "Phone", price: 500 },
    { name: "Computer", price: 1000 },
    { name: "Keyboard", price: 25 },
    ];

  • @ovskihouse5270
    @ovskihouse5270 2 года назад +1

    I like ur contents js and css

  • @Developer-404
    @Developer-404 4 года назад +2

    This man is doing such a great job , the way he explain things are great. Thank you for you contribution👏.

  • @hosseinpanahy5358
    @hosseinpanahy5358 Год назад +1

    This video is one of the reasons that I preach people learning sth in this era wouldn't require taking particular courses and having high-paid pedagogues... THANKS SIR♥️♥️♥️♥️♥️♥️

  • @George9688
    @George9688 3 года назад

    here's the JSON
    const items = [
    { name: 'Bike', price: 100 },
    { name: 'TV', price: 200 },
    { name: 'Album', price: 10 },
    { name: 'Book', price: 5 },
    { name: 'Phone', price: 500 },
    { name: 'Computer', price: 1000 },
    { name: 'Keyboard', price: 25 }
    ]

  • @warlock257
    @warlock257 4 года назад +2

    Feel like I'll be much more confident at job interviews if I can master these.
    Thanks!

  • @ojassinghyadav9272
    @ojassinghyadav9272 3 года назад +1

    this video helped me so much

  • @sayatly
    @sayatly 4 года назад

    Зур Рахмат сина)) thx for u!

  • @viniciusresende3605
    @viniciusresende3605 3 года назад +1

    Omfg, foreach saved my life. Thanks!

  • @josuebarros-desenvolvedorw2490
    @josuebarros-desenvolvedorw2490 3 года назад

    Wonderful video!!! Thanks for unlocking the JavaScript lost inside me!!!

  • @erichernandez38
    @erichernandez38 3 года назад +1

    i had no idea what was going on tbh

  • @rizalsalim9816
    @rizalsalim9816 4 месяца назад

    you can simplify reduce like this:
    const total = items.reduce((currentTotal, {item} => currentTotal+n, 0);

  • @mykalimba
    @mykalimba 4 года назад +1

    Might be useful (maybe in a follow up, or V2 video) to discuss the performance ("big O" notation) of these various methods.

  • @moshohet
    @moshohet 4 года назад +2

    Remarkable value for time!
    Japanese-style efficiency :)
    Amazing result!

    • @moshohet
      @moshohet 4 года назад

      @Jason Myers :)

  • @Pareshbpatel
    @Pareshbpatel 2 года назад

    Great Tutorial on JavaScript Array Methods/High Order Functions. Thanks, Kyle
    {2022-03-09}

  • @michaelokellomykfrost
    @michaelokellomykfrost 2 года назад +2

    Man this was just amazing. You explain it with such simplicity without complicating and confusing the viewer. Thanks man

  • @bruhcsp
    @bruhcsp 4 года назад +2

    A thousand years working with JS and I didn't know about some of those functions

  • @ElrondMcBong86
    @ElrondMcBong86 2 года назад

    How can I use the includes-method on the original array?
    const includesX = Items.includes({ name: "Bike", price: 100 })
    returns false... :-S

  • @bramaningds
    @bramaningds 5 лет назад +1

    So what is difference between some and includes?

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +1

      Some allows you to use a function to check true/false while includes only lets you check if a specific value is in an array.

  • @tinmank
    @tinmank 4 года назад

    Naming for some method is pretty stupid. Instead, it should be called. one of.
    Array.prototype.oneof = Array.prototype.some.bind({})
    There, fixed.
    Also, is "includes" any faster or better than "indexOf"?
    Edit: Turns out indexOf can't find NaN values.

  • @WeiseGuy91
    @WeiseGuy91 Год назад

    How does Array.includes() work when you have an array of objects with key/values? You want to check if the array has an item where the price is $5 for example?

  • @djnefrozhardstylepromotion3527
    @djnefrozhardstylepromotion3527 3 года назад

    What is the difference between .map and .forEach ? I've just come to realize that I've been using .map for both usages...

  • @ThePorschefan
    @ThePorschefan 3 года назад

    This video explained for excel folks:
    Arrays = Excel table
    Filter = Filtering a table in excel or using an if function such as =if(A1

  • @Joe-qp9ix
    @Joe-qp9ix 2 месяца назад

    I'm so glad you went in-depth with explaining reduce. I just started learning software dev 2 weeks ago and couldn't wrap my head around it.

  • @secretcaptain7694
    @secretcaptain7694 3 года назад

    I don't why this video had 200 dislikes. This type of videos are rare in RUclips . I like this video so much 👍👍👍👍👍👍👍👍

  • @tristan2439
    @tristan2439 Год назад

    But wouldnt have includes() also worked on the the json with the names and prices? E.g. items.includes('Book'). Just to check if the book is already in this array?

  • @monishmarketer
    @monishmarketer 3 года назад +1

    Great video 👌😊

  • @unchartouille1208
    @unchartouille1208 4 года назад

    Yes sure these method are very handy, well kind of because most of them are VERY EXPENSIVE. For large datasets, traditional method are recommended.

  • @adnanamin3666
    @adnanamin3666 3 года назад

    How do I get the index of items as in 1-10 format? JS usually counts from 0, but if I want to display the numbers, how do I do that? For example; let's say I have a slider and it has 4 slides and I want to display the number of each slide when it's active - on a web page.
    Also, would you like to take a tutorial request? Cz I've got one!

  • @DanteEhome
    @DanteEhome 5 лет назад

    I'm confused
    Why is that reduce function written in item.reduce((currentTotal, item) => {return item.price + currentTotal}, 0)?
    The (currentTotal, item), from my understanding, the currentTotal is the accumulator, and item should be each item in the array, which is the currentValue (based on developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)
    So my question is, why is that item not item.price? or is that the same thing?

  • @udaykiranr1223
    @udaykiranr1223 Год назад

    callback function of map takes three parameters 1. Item 2. Index 3. TotalArray

  • @justsaybobby
    @justsaybobby 3 года назад

    Do you use the const if it’s in a class? Like : sample() {
    Const Sampleincludes = sample.include => (2)
    }
    or I guess it’s all one line with arrow functions BUT do you use const? Please help.

  • @rthosarrohini
    @rthosarrohini 4 года назад

    I like ur explanation. I want make video on how to store dom inputs into this type of array exa: name: document.getElementById("text1") that's like.

  • @kamertonaudiophileplayer847
    @kamertonaudiophileplayer847 3 года назад

    Do you know an array size limitation in JS? Not so big, around 32,786. So, I have to create ABigArray in JS automatically add a second array and more in a case if an index is too big. Got it?

  • @tuananhdo1870
    @tuananhdo1870 3 года назад

    I would like to add:
    push
    findIndex to find index
    splice(index, 1) to remove

  • @jessicajax8568
    @jessicajax8568 2 года назад

    Thank you best explanation I have seen thus far...keep up the good work !!!!!👍👍

  • @nathnolt
    @nathnolt 11 месяцев назад

    I personally think that the most must know Array methods are push, indexOf, slice, splice, sort

  • @jurgenbjansen7574
    @jurgenbjansen7574 5 лет назад +2

    This is wonderful Kyle! Can you share the setup of your development environment?

    • @WebDevSimplified
      @WebDevSimplified  5 лет назад +4

      Thank you. My dev environment is actually really straight forward. I have a windows computer and I use visual studio code with the live server extension to auto refresh my page. Other than that pretty much everything is default since it makes it easier for people to follow along. Do you have any other questions about my setup?

  •  2 года назад

    Harikasınız. Konular Muteşem.

  • @yubrajkarki2512
    @yubrajkarki2512 5 лет назад +2

    Thank you so much, buddy. I was struggling with this until I stumbled onto your video. Thanks a lot.

  • @WeiseGuy91
    @WeiseGuy91 Год назад

    What if Array.find() doesn't contain the item you're looking for and returns false for every item in the array?

  • @VadimTrishkin
    @VadimTrishkin 2 года назад

    forEach - bad practice, good is:
    for (const item of collection) { item.doSmth(); };

  • @emmettdja
    @emmettdja Год назад +1

    6:19 lies...

  • @badiszg2696
    @badiszg2696 3 года назад

    Thank you so much Bro , I hope if I was understand English because I Arabic