All language subtitles for 22. flat and flatMap

af Afrikaans
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian Download
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 1 00:00:00,891 --> 00:00:02,835 The next two array methods 2 2 00:00:02,835 --> 00:00:04,490 that we're gonna learn, 3 3 00:00:04,490 --> 00:00:07,790 are the flat and flat map methods. 4 4 00:00:07,790 --> 00:00:11,630 And thankfully, these are very easy to understand. 5 5 00:00:11,630 --> 00:00:13,143 So let's go. 6 6 00:00:14,650 --> 00:00:16,880 So let's say that we have an array 7 7 00:00:16,880 --> 00:00:18,693 with some arrays in it. 8 8 00:00:19,570 --> 00:00:22,083 So essentially a nested array. 9 9 00:00:23,810 --> 00:00:26,113 So let's say one, two, three, 10 10 00:00:27,180 --> 00:00:29,020 and then another array here, 11 11 00:00:29,020 --> 00:00:30,253 four, five, six, 12 12 00:00:31,370 --> 00:00:34,180 and then even some values like this. 13 13 00:00:34,180 --> 00:00:36,430 So this is perfectly normal, 14 14 00:00:36,430 --> 00:00:37,740 but what if we wanted 15 15 00:00:37,740 --> 00:00:41,600 to take all these elements in the separate 16 16 00:00:41,600 --> 00:00:43,420 and put all of these together 17 17 00:00:43,420 --> 00:00:45,280 in just one big array, 18 18 00:00:45,280 --> 00:00:47,040 which contains all the numbers here 19 19 00:00:47,040 --> 00:00:48,880 from one to eight? 20 20 00:00:48,880 --> 00:00:50,810 Well, that's pretty simple, 21 21 00:00:50,810 --> 00:00:53,793 using the new flat method. 22 22 00:00:54,800 --> 00:00:55,700 And they say new, 23 23 00:00:55,700 --> 00:00:58,670 because flat and also flat map 24 24 00:00:58,670 --> 00:01:01,340 were introduced in ES2019. 25 25 00:01:01,340 --> 00:01:03,120 So they are pretty recent, 26 26 00:01:03,120 --> 00:01:04,360 and one more time, 27 27 00:01:04,360 --> 00:01:06,470 they will therefore not work 28 28 00:01:06,470 --> 00:01:09,650 in super old browsers. Okay. 29 29 00:01:09,650 --> 00:01:11,210 And actually that's it, 30 30 00:01:11,210 --> 00:01:12,800 for the flat method. 31 31 00:01:12,800 --> 00:01:16,210 So no callback function, adjust like this, 32 32 00:01:16,210 --> 00:01:18,030 and we get indeed, 33 33 00:01:18,030 --> 00:01:20,486 or full array from one to eight. 34 34 00:01:20,486 --> 00:01:23,620 So (indistinct) removed the nested arrays 35 35 00:01:23,620 --> 00:01:25,310 and flattened the array, 36 36 00:01:25,310 --> 00:01:29,660 which is why the method is called flat. 37 37 00:01:29,660 --> 00:01:32,200 So very nice, very simple 38 38 00:01:32,200 --> 00:01:34,633 and no callback function this time. 39 39 00:01:35,610 --> 00:01:37,290 Okay. But now let's say 40 40 00:01:37,290 --> 00:01:40,100 that we have an array, 41 41 00:01:40,100 --> 00:01:41,973 which is even deeper nested. 42 42 00:01:43,390 --> 00:01:45,033 So let's call it arrDeep. 43 43 00:01:46,190 --> 00:01:48,790 And so this one right now has only, 44 44 00:01:48,790 --> 00:01:51,280 like, one level of nesting, 45 45 00:01:51,280 --> 00:01:52,120 but let's say that, 46 46 00:01:52,120 --> 00:01:55,493 these two here, are in their own array still. 47 47 00:01:56,350 --> 00:01:58,770 And maybe these two here as well. 48 48 00:01:58,770 --> 00:02:00,310 So now we have an array, 49 49 00:02:00,310 --> 00:02:02,603 inside an array, inside an array. 50 50 00:02:04,530 --> 00:02:05,910 So let's see what happens, 51 51 00:02:05,910 --> 00:02:07,493 when we flat this one, 52 52 00:02:11,880 --> 00:02:14,410 and we got the same result, 53 53 00:02:14,410 --> 00:02:17,580 but that's because I made this mistake. 54 54 00:02:17,580 --> 00:02:19,993 So we need to flatten arrDeep. 55 55 00:02:21,440 --> 00:02:23,700 And so now you'll see 56 56 00:02:23,700 --> 00:02:25,750 that we get this result, 57 57 00:02:25,750 --> 00:02:30,110 which still contains the two inner arrays. All right. 58 58 00:02:30,110 --> 00:02:32,030 So this means that the flat method, 59 59 00:02:32,030 --> 00:02:33,910 only goes one level deep, 60 60 00:02:33,910 --> 00:02:35,393 when flattening the array. 61 61 00:02:36,470 --> 00:02:37,860 So this three here, 62 62 00:02:37,860 --> 00:02:40,890 was inside the first level of nesting. 63 63 00:02:40,890 --> 00:02:43,170 And so therefore it was taken out 64 64 00:02:43,170 --> 00:02:44,880 and it's now in the main array, 65 65 00:02:44,880 --> 00:02:47,863 but then we still have this nested array in there. 66 66 00:02:48,860 --> 00:02:51,450 So we can fortunately fix that, 67 67 00:02:51,450 --> 00:02:54,110 by using the depth argument. 68 68 00:02:54,110 --> 00:02:56,300 So right now, basically flat, 69 69 00:02:56,300 --> 00:02:57,700 is running with the, 70 70 00:02:57,700 --> 00:02:59,203 one here as the depth. 71 71 00:03:00,080 --> 00:03:02,320 And so if we run it with one, 72 72 00:03:02,320 --> 00:03:03,710 which is the default, 73 73 00:03:03,710 --> 00:03:05,520 then we get this, 74 74 00:03:05,520 --> 00:03:08,023 but we can go two levels deep. 75 75 00:03:09,010 --> 00:03:13,350 And so now we get the same result as before. 76 76 00:03:13,350 --> 00:03:15,370 And that's because it now goes, 77 77 00:03:15,370 --> 00:03:17,880 even into the second level of nesting 78 78 00:03:17,880 --> 00:03:22,293 and also takes the element out of depth array. All right. 79 79 00:03:23,270 --> 00:03:25,230 So that's how flat works, 80 80 00:03:25,230 --> 00:03:28,390 but this example is not really that useful. 81 81 00:03:28,390 --> 00:03:29,460 And so let's go back 82 82 00:03:29,460 --> 00:03:31,460 to the bank accounts. 83 83 00:03:31,460 --> 00:03:33,820 So let's say that the bank itself, 84 84 00:03:33,820 --> 00:03:36,220 wants to calculate the overall balance 85 85 00:03:36,220 --> 00:03:37,620 of all the movements 86 86 00:03:37,620 --> 00:03:39,710 of all the accounts. 87 87 00:03:39,710 --> 00:03:42,773 So how would we go about solving this problem? 88 88 00:03:43,620 --> 00:03:45,040 Well, first of all, 89 89 00:03:45,040 --> 00:03:48,590 we have all these movements stored in arrays, 90 90 00:03:48,590 --> 00:03:51,160 and these arrays are inside the objects 91 91 00:03:51,160 --> 00:03:52,583 in the accounts array. 92 92 00:03:53,840 --> 00:03:58,840 So in this array that we have been using. 93 93 00:03:58,850 --> 00:04:02,460 So accounts, so that's the one, 94 94 00:04:02,460 --> 00:04:05,700 so this is where we have our movements. 95 95 00:04:05,700 --> 00:04:07,320 And so the first thing to do, 96 96 00:04:07,320 --> 00:04:08,960 is to take them out of here 97 97 00:04:08,960 --> 00:04:11,780 and put them all into one array. 98 98 00:04:11,780 --> 00:04:13,313 So how would we do that? 99 99 00:04:14,550 --> 00:04:16,650 Well, let's create a variable here called, 100 100 00:04:17,750 --> 00:04:22,750 account movements, and so we could do, 101 101 00:04:24,860 --> 00:04:29,200 accounts, accounts like this, 102 102 00:04:29,200 --> 00:04:30,950 and then what we want to create, 103 103 00:04:30,950 --> 00:04:32,250 is the new array, 104 104 00:04:32,250 --> 00:04:33,770 but with the same length, 105 105 00:04:33,770 --> 00:04:36,313 which only contains these movements array. 106 106 00:04:37,150 --> 00:04:39,836 So that's what I was just saying. 107 107 00:04:39,836 --> 00:04:40,980 And so for that, 108 108 00:04:40,980 --> 00:04:43,250 we can use the map method. 109 109 00:04:43,250 --> 00:04:45,930 So in each account, 110 110 00:04:45,930 --> 00:04:50,330 take the account.movements 111 111 00:04:50,330 --> 00:04:52,940 and so return that value, 112 112 00:04:52,940 --> 00:04:57,940 into the new array. All right. 113 113 00:04:58,970 --> 00:05:00,930 And so now we have this array, 114 114 00:05:00,930 --> 00:05:03,050 which then in turn contains the array 115 115 00:05:03,890 --> 00:05:05,370 of all the movements. 116 116 00:05:05,370 --> 00:05:06,203 And so you see, 117 117 00:05:06,203 --> 00:05:09,860 that now we actually have a nested structure here. 118 118 00:05:09,860 --> 00:05:13,310 So an array which contains other arrays. 119 119 00:05:13,310 --> 00:05:15,530 And so probably you can see 120 120 00:05:15,530 --> 00:05:17,900 where I'm going with this, 121 121 00:05:17,900 --> 00:05:20,580 because now I want an array, 122 122 00:05:20,580 --> 00:05:23,240 which simply contains all of these values, 123 123 00:05:23,240 --> 00:05:24,353 just in one array. 124 124 00:05:25,200 --> 00:05:28,590 So let's call this one all movements. 125 125 00:05:28,590 --> 00:05:31,710 And so it's gonna be, accountmovements.flat. 126 126 00:05:38,070 --> 00:05:41,050 And we have only one level of nesting. 127 127 00:05:41,050 --> 00:05:42,650 And so there's not even a need 128 128 00:05:42,650 --> 00:05:44,770 for any parameter here. 129 129 00:05:44,770 --> 00:05:46,053 So for any argument. 130 130 00:05:47,370 --> 00:05:49,280 So, now we get this, 131 131 00:05:49,280 --> 00:05:52,240 nice array of the length 29, 132 132 00:05:52,240 --> 00:05:54,220 which all of these movements. 133 133 00:05:54,220 --> 00:05:55,500 And now all we have to do, 134 134 00:05:55,500 --> 00:05:57,290 is to add them all together, 135 135 00:05:57,290 --> 00:06:00,223 which is pretty easy at this point. 136 136 00:06:02,009 --> 00:06:05,160 So let's call this one overall balance, 137 137 00:06:06,290 --> 00:06:11,177 is equal to allmovements.reduce, 138 138 00:06:13,580 --> 00:06:16,640 until we got the accumulator 139 139 00:06:16,640 --> 00:06:18,073 and to current movement. 140 140 00:06:20,100 --> 00:06:23,320 And we return accumulator plus movement, 141 141 00:06:23,320 --> 00:06:25,133 and we start with zero. 142 142 00:06:26,610 --> 00:06:28,910 So I'm doing this all very fast here, 143 143 00:06:28,910 --> 00:06:31,870 because I already explained all of this, 144 144 00:06:31,870 --> 00:06:33,683 multiple times at this point. 145 145 00:06:36,470 --> 00:06:38,560 And so here we get the final result 146 146 00:06:38,560 --> 00:06:41,150 of adding up all of these values, 147 147 00:06:41,150 --> 00:06:44,010 that were originally as we started, 148 148 00:06:44,010 --> 00:06:46,240 in the separate movements arrays 149 149 00:06:46,240 --> 00:06:47,490 that were in turn, 150 150 00:06:47,490 --> 00:06:49,853 the inside of the account objects. 151 151 00:06:51,061 --> 00:06:53,230 And of course we can make this here, 152 152 00:06:53,230 --> 00:06:55,740 a lot more beautiful. 153 153 00:06:55,740 --> 00:06:59,470 So instead of doing all of this separately, 154 154 00:06:59,470 --> 00:07:01,510 as you already know, 155 155 00:07:01,510 --> 00:07:02,933 we can use chaining. 156 156 00:07:03,870 --> 00:07:06,920 So we start with this here, 157 157 00:07:06,920 --> 00:07:08,943 so building a new array, 158 158 00:07:10,180 --> 00:07:13,670 out of the array of account objects, 159 159 00:07:13,670 --> 00:07:17,650 then we flat that result. 160 160 00:07:17,650 --> 00:07:20,183 And then we add it all together. 161 161 00:07:22,480 --> 00:07:24,583 So like this, 162 162 00:07:27,030 --> 00:07:29,660 and then we log it all to the console, 163 163 00:07:29,660 --> 00:07:32,210 and this is then unnecessary. 164 164 00:07:32,210 --> 00:07:34,533 And actually I will just delete all of it. 165 165 00:07:35,950 --> 00:07:37,320 Give it a safe, 166 166 00:07:37,320 --> 00:07:39,943 until we get the exact same result. 167 167 00:07:41,250 --> 00:07:44,640 Now it turns out that, using a map first 168 168 00:07:44,640 --> 00:07:46,670 and then flattening the result, 169 169 00:07:46,670 --> 00:07:48,870 and it's a pretty common operation. 170 170 00:07:48,870 --> 00:07:51,410 So that's exactly what we have here. 171 171 00:07:51,410 --> 00:07:52,864 So first we map, 172 172 00:07:52,864 --> 00:07:55,520 and then we flat that result. 173 173 00:07:55,520 --> 00:07:57,990 So that's exactly what we have here. 174 174 00:07:57,990 --> 00:07:59,470 And so to solve this, 175 175 00:07:59,470 --> 00:08:00,830 there is another method 176 176 00:08:00,830 --> 00:08:02,190 that was also introduced 177 177 00:08:02,190 --> 00:08:05,730 at the same time, which is flat map. 178 178 00:08:05,730 --> 00:08:08,280 And so flat map essentially combines, 179 179 00:08:08,280 --> 00:08:10,500 a map and a flat method, 180 180 00:08:10,500 --> 00:08:12,060 into just one method, 181 181 00:08:12,060 --> 00:08:14,153 which is better for performance. 182 182 00:08:17,446 --> 00:08:19,840 So let's do this one here again, 183 183 00:08:19,840 --> 00:08:24,043 but this time with flat map. 184 184 00:08:25,730 --> 00:08:28,890 So actually we can just copy it 185 185 00:08:28,890 --> 00:08:31,283 and here I'm gonna call it, just the two. 186 186 00:08:32,470 --> 00:08:36,343 And so here we will now use flat map instead. 187 187 00:08:37,370 --> 00:08:40,460 And since flat map also does mapping, 188 188 00:08:40,460 --> 00:08:43,520 it needs to receive exactly the same callback 189 189 00:08:43,520 --> 00:08:45,063 as a map method. 190 190 00:08:47,790 --> 00:08:49,730 So this is essentially a map method 191 191 00:08:49,730 --> 00:08:52,200 that all it does is, in the end, 192 192 00:08:52,200 --> 00:08:55,170 it then flattens the result. 193 193 00:08:55,170 --> 00:08:58,893 And so you see here the result is the same. 194 194 00:08:59,810 --> 00:09:02,440 Now just notice that, flat map here, 195 195 00:09:02,440 --> 00:09:04,360 only goes one level deep 196 196 00:09:04,360 --> 00:09:06,130 and we cannot change it. 197 197 00:09:06,130 --> 00:09:09,480 So if you do need to go deeper than just one level, 198 198 00:09:09,480 --> 00:09:12,680 you still need to use the flat method. 199 199 00:09:12,680 --> 00:09:14,940 So anyway, keep these two in mind. 200 200 00:09:14,940 --> 00:09:17,940 Whenever you find yourself in a situation 201 201 00:09:17,940 --> 00:09:19,640 where you have nested the race 202 202 00:09:19,640 --> 00:09:21,003 and need to work with them. 203 203 00:09:21,930 --> 00:09:22,763 And believe me, 204 204 00:09:22,763 --> 00:09:24,800 that happens more often than you think, 205 205 00:09:24,800 --> 00:09:25,633 and I believe that, 206 206 00:09:25,633 --> 00:09:28,050 even in the course of this course, 207 207 00:09:28,050 --> 00:09:30,023 there is gonna be another situation. 16152

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.