WEBVTT

1
00:00:01.330 --> 00:00:04.200
<v Jonas>Let's now use the map and for each method</v>

2
00:00:04.200 --> 00:00:07.530
to compute usernames for each account owner

3
00:00:07.530 --> 00:00:08.803
in our application.

4
00:00:10.190 --> 00:00:13.440
So we have these four accounts, and for each of them,

5
00:00:13.440 --> 00:00:17.090
we want to basically compute a username.

6
00:00:17.090 --> 00:00:20.280
And the username is simply the initials

7
00:00:20.280 --> 00:00:21.603
of each of the users.

8
00:00:23.670 --> 00:00:26.400
So let's just start with one of them,

9
00:00:26.400 --> 00:00:29.300
just with one string to make it really easy.

10
00:00:29.300 --> 00:00:33.500
And then we will generalize that function for

11
00:00:33.500 --> 00:00:37.210
the entire accounts array that we have down here,

12
00:00:37.210 --> 00:00:39.750
so which contains all of the accounts.

13
00:00:39.750 --> 00:00:42.400
But for now, I will just grab this string here

14
00:00:42.400 --> 00:00:45.053
and create a username for this one.

15
00:00:46.360 --> 00:00:48.410
So let's do that down here,

16
00:00:48.410 --> 00:00:50.963
after this first function that we created.

17
00:00:53.470 --> 00:00:56.060
And for now, we will do this outside of a function

18
00:00:56.060 --> 00:00:57.840
just to see how it works,

19
00:00:57.840 --> 00:01:00.610
and then afterwards, we will create a new function.

20
00:01:00.610 --> 00:01:04.450
So let's say the user is this one here,

21
00:01:04.450 --> 00:01:07.490
and we want to compute the username.

22
00:01:07.490 --> 00:01:11.723
So for this one here, the username should be stw.

23
00:01:13.950 --> 00:01:16.673
So that's just the initials in lowercase.

24
00:01:18.570 --> 00:01:21.023
And so let's do that.

25
00:01:22.530 --> 00:01:26.573
So we start by transforming this string to a lowercase.

26
00:01:29.270 --> 00:01:32.290
So we already know how to do that.

27
00:01:32.290 --> 00:01:34.280
And now we simply want to take

28
00:01:35.150 --> 00:01:37.683
the first letter of each of the words.

29
00:01:39.923 --> 00:01:43.410
And so we need to basically split up the string

30
00:01:43.410 --> 00:01:45.300
into the multiple words.

31
00:01:45.300 --> 00:01:50.300
So this is a very common use case for the split method,

32
00:01:50.910 --> 00:01:53.360
so dividing by spaces,

33
00:01:53.360 --> 00:01:56.740
which will divide the string into words.

34
00:01:56.740 --> 00:01:59.220
And let's just take a look at what we have now,

35
00:01:59.220 --> 00:02:03.003
so that we can discuss our next move here.

36
00:02:04.130 --> 00:02:06.350
So username, and so right now

37
00:02:06.350 --> 00:02:10.160
we have Stephen, Thomas, and Williams.

38
00:02:10.160 --> 00:02:14.420
And so how do we take each of the first letters here?

39
00:02:14.420 --> 00:02:17.060
Well, we could simply loop over the array,

40
00:02:17.060 --> 00:02:19.980
and then take the first letter in each iteration,

41
00:02:19.980 --> 00:02:22.120
and add them into a new array.

42
00:02:22.120 --> 00:02:24.610
And then in the end, we would join that array,

43
00:02:24.610 --> 00:02:28.203
and we would end up with just a string of stw.

44
00:02:30.090 --> 00:02:32.220
So let's do what I just said.

45
00:02:32.220 --> 00:02:33.940
So looping over this array,

46
00:02:33.940 --> 00:02:36.920
taking the first letter and then putting it

47
00:02:36.920 --> 00:02:38.680
into a new array.

48
00:02:38.680 --> 00:02:41.713
And that is exactly what the map method does.

49
00:02:43.870 --> 00:02:46.210
We can do that directly here,

50
00:02:46.210 --> 00:02:50.460
because this split method here returns an array.

51
00:02:50.460 --> 00:02:52.490
And we can then call the map method

52
00:02:52.490 --> 00:02:54.663
on that resulting array.

53
00:02:55.530 --> 00:02:58.770
So we can immediately do .map here,

54
00:02:58.770 --> 00:03:00.790
just like we can call the split method

55
00:03:00.790 --> 00:03:04.090
on the result of the two lowercase method,

56
00:03:04.090 --> 00:03:06.350
because this one here returns a string,

57
00:03:06.350 --> 00:03:09.063
and split is available on all strings.

58
00:03:11.820 --> 00:03:14.430
So let's define our callback function here.

59
00:03:14.430 --> 00:03:17.493
And I will start by doing it with a irregular function.

60
00:03:18.570 --> 00:03:21.030
And so here, let's say we get a word

61
00:03:22.190 --> 00:03:24.593
or a name, it doesn't really matter here.

62
00:03:26.440 --> 00:03:29.530
And so in each iteration, what we want to do

63
00:03:29.530 --> 00:03:33.400
is simply to return the first letter.

64
00:03:33.400 --> 00:03:36.293
So that's name at position zero.

65
00:03:38.365 --> 00:03:40.000
And so right now,

66
00:03:40.000 --> 00:03:43.710
this should be an array with only these three initials.

67
00:03:43.710 --> 00:03:45.150
So let's see.

68
00:03:45.150 --> 00:03:47.533
And yes, beautiful.

69
00:03:48.960 --> 00:03:50.830
That worked just fine,

70
00:03:50.830 --> 00:03:53.310
and so the results of this here,

71
00:03:53.310 --> 00:03:56.610
of this whole thing, is now an array.

72
00:03:56.610 --> 00:04:00.203
And on an array, we can call the join method.

73
00:04:01.270 --> 00:04:06.270
So .join, and simply by an empty string,

74
00:04:06.350 --> 00:04:10.823
and this will give us the final result of stw.

75
00:04:12.370 --> 00:04:14.700
All right, great.

76
00:04:14.700 --> 00:04:17.073
Now let's simplify this callback function here.

77
00:04:18.310 --> 00:04:22.920
And again, I will start by deleting the function keyword.

78
00:04:22.920 --> 00:04:27.920
Then we can also delete the curly braces,

79
00:04:28.080 --> 00:04:31.720
and finally, also delete the return.

80
00:04:31.720 --> 00:04:34.533
And so, see how simple this has become now.

81
00:04:35.930 --> 00:04:40.860
So, we transform name to name at the first position,

82
00:04:40.860 --> 00:04:42.960
so just the first character.

83
00:04:42.960 --> 00:04:45.560
And one more time, don't forget that

84
00:04:45.560 --> 00:04:48.230
this is actively returning here,

85
00:04:48.230 --> 00:04:50.700
we just don't see it.

86
00:04:50.700 --> 00:04:53.150
But the return is happening.

87
00:04:53.150 --> 00:04:55.530
And this is the reason why this works,

88
00:04:55.530 --> 00:04:58.660
because the callback function in the map method

89
00:04:58.660 --> 00:05:01.410
always needs to return the new value

90
00:05:01.410 --> 00:05:03.750
that should be in the new array.

91
00:05:03.750 --> 00:05:08.700
All right, so this works great with this username.

92
00:05:08.700 --> 00:05:12.690
Let's not take this actually into a function.

93
00:05:12.690 --> 00:05:14.003
So, I'm cutting it here,

94
00:05:15.880 --> 00:05:16.713
and let's say

95
00:05:17.620 --> 00:05:19.220
create

96
00:05:19.220 --> 00:05:20.213
usernames,

97
00:05:24.380 --> 00:05:27.910
create a function, add this here,

98
00:05:27.910 --> 00:05:29.440
and for now, let's say,

99
00:05:29.440 --> 00:05:31.463
we get the user in here.

100
00:05:33.260 --> 00:05:36.443
And so now we can call the function with this string.

101
00:05:40.974 --> 00:05:43.540
And here, I called console.log,

102
00:05:43.540 --> 00:05:45.243
instead of create username.

103
00:05:48.390 --> 00:05:52.000
And yeah, if we want to see the result,

104
00:05:52.000 --> 00:05:54.683
we would also have to log it to the console now.

105
00:05:56.590 --> 00:06:00.793
So of course, first returning the username,

106
00:06:04.730 --> 00:06:07.873
and then log it to the console here as well.

107
00:06:08.750 --> 00:06:11.250
And so Indeed, we now get the same initial

108
00:06:11.250 --> 00:06:13.110
that we had before.

109
00:06:13.110 --> 00:06:15.160
But now we actually want to compute

110
00:06:15.160 --> 00:06:18.590
one username for each of the account holders

111
00:06:18.590 --> 00:06:20.053
in our accounts array.

112
00:06:21.500 --> 00:06:23.830
So to do that, should we use the map

113
00:06:23.830 --> 00:06:25.353
or the for each method.

114
00:06:26.250 --> 00:06:29.220
Well, we do not want to create a new array

115
00:06:29.220 --> 00:06:30.720
in this situation,

116
00:06:30.720 --> 00:06:33.760
all we want to do is to modify the object,

117
00:06:33.760 --> 00:06:38.570
so the elements that already exist in the accounts array.

118
00:06:38.570 --> 00:06:39.403
So

119
00:06:40.420 --> 00:06:41.543
in this array here,

120
00:06:42.790 --> 00:06:45.790
and so what we want is to simply loop over

121
00:06:45.790 --> 00:06:48.750
this array here, and then do something.

122
00:06:48.750 --> 00:06:51.413
And so what we want that we use for each.

123
00:06:53.410 --> 00:06:56.320
So let's modify this function here some more,

124
00:06:56.320 --> 00:06:59.380
and instead of simply receiving one user,

125
00:06:59.380 --> 00:07:02.283
what we want to do is to receive all the accounts.

126
00:07:03.450 --> 00:07:06.550
So basically an array of account.

127
00:07:06.550 --> 00:07:08.360
And this goes back to the philosophy

128
00:07:08.360 --> 00:07:11.800
I explained to you in the last lecture, which is that,

129
00:07:11.800 --> 00:07:14.700
each function should actually receive the data

130
00:07:14.700 --> 00:07:16.370
that it should work with,

131
00:07:16.370 --> 00:07:19.210
instead of using a global variable.

132
00:07:19.210 --> 00:07:22.900
So that's exactly what we did here, with the movements,

133
00:07:22.900 --> 00:07:25.940
which we could have read directly from the global variable

134
00:07:26.780 --> 00:07:30.770
of account1.movements for example.

135
00:07:30.770 --> 00:07:34.740
But instead, we created a function that receives that data,

136
00:07:34.740 --> 00:07:36.780
and can then work with that data,

137
00:07:36.780 --> 00:07:40.670
or with any other data that we choose to pass into it.

138
00:07:40.670 --> 00:07:42.310
And so here we are doing the same,

139
00:07:42.310 --> 00:07:44.990
we do not want to rely on the accounts array

140
00:07:44.990 --> 00:07:46.640
that we already have.

141
00:07:46.640 --> 00:07:49.533
But instead, we want to pass it into the function.

142
00:07:50.650 --> 00:07:52.630
Let's get rid of all of this.

143
00:07:52.630 --> 00:07:55.710
And so what I mean is to actually pass

144
00:07:55.710 --> 00:07:57.730
the accounts array in here.

145
00:07:57.730 --> 00:08:00.830
And here, it doesn't have to be called accounts.

146
00:08:00.830 --> 00:08:04.323
Let's just call it like this, as an abbreviation.

147
00:08:05.270 --> 00:08:08.520
Just to remove a little bit of the confusion

148
00:08:08.520 --> 00:08:09.520
that you might have.

149
00:08:11.950 --> 00:08:13.450
And now, as we were saying,

150
00:08:13.450 --> 00:08:16.360
we need to use the for each method here,

151
00:08:16.360 --> 00:08:20.090
because again, we do not want to create a new array,

152
00:08:20.090 --> 00:08:22.740
we simply want to modify basically,

153
00:08:22.740 --> 00:08:25.420
the array that we get as an input.

154
00:08:25.420 --> 00:08:29.050
And this is a really important distinction to keep in mind.

155
00:08:29.050 --> 00:08:30.690
So here we are again,

156
00:08:30.690 --> 00:08:33.210
talking about the side effects that I mentioned

157
00:08:33.210 --> 00:08:34.740
in the last video.

158
00:08:34.740 --> 00:08:37.470
And in this case, the side effects are gonna be

159
00:08:37.470 --> 00:08:42.440
to change, so to mutate the original accounts array.

160
00:08:42.440 --> 00:08:44.550
And so that's what we want to do here,

161
00:08:44.550 --> 00:08:47.843
and so for each is the way to go.

162
00:08:48.750 --> 00:08:52.900
So for each account in the accounts array,

163
00:08:52.900 --> 00:08:54.860
so I'm just calling this acc,

164
00:08:54.860 --> 00:08:58.800
which is again, an abbreviation for one single account.

165
00:08:58.800 --> 00:09:03.593
So for each account, we now want to do this here basically.

166
00:09:05.910 --> 00:09:10.163
So let's grab all this, we can remove this.

167
00:09:12.550 --> 00:09:15.720
And so let's create a new property on each

168
00:09:15.720 --> 00:09:17.143
of the account objects.

169
00:09:18.120 --> 00:09:21.680
So account.username,

170
00:09:21.680 --> 00:09:25.773
and that will be equal to user.owner,

171
00:09:28.840 --> 00:09:31.163
and so let's check out why that is.

172
00:09:32.420 --> 00:09:35.400
So each of these accounts has the owner property,

173
00:09:35.400 --> 00:09:38.870
and so that's where the name of the owner

174
00:09:38.870 --> 00:09:40.770
of the user comes from.

175
00:09:40.770 --> 00:09:42.360
So we take that,

176
00:09:42.360 --> 00:09:44.110
so account.owner

177
00:09:45.150 --> 00:09:47.703
and create or username from that.

178
00:09:49.690 --> 00:09:51.160
So that's what we do here.

179
00:09:51.160 --> 00:09:53.330
And then we create a new property on

180
00:09:53.330 --> 00:09:55.420
that account element.

181
00:09:55.420 --> 00:09:57.080
And yeah,

182
00:09:57.080 --> 00:09:59.420
and that will then contain the username

183
00:09:59.420 --> 00:10:01.513
that we create here.

184
00:10:04.180 --> 00:10:06.610
Here we have some kind of error,

185
00:10:06.610 --> 00:10:09.620
and of course, it's not user,

186
00:10:09.620 --> 00:10:12.023
it is account.owner.

187
00:10:13.530 --> 00:10:14.633
And now that's it,

188
00:10:16.670 --> 00:10:19.850
and in this function, we do not return anything,

189
00:10:19.850 --> 00:10:22.540
because again, what we're doing here

190
00:10:22.540 --> 00:10:25.090
is to produce a side effect.

191
00:10:25.090 --> 00:10:29.110
So we are doing something to this account object here.

192
00:10:29.110 --> 00:10:32.170
And so there is no need to return anything.

193
00:10:32.170 --> 00:10:35.200
We are just doing some work here, basically,

194
00:10:35.200 --> 00:10:37.843
we are not creating a new value to return.

195
00:10:39.660 --> 00:10:42.420
If we want to see if this actually worked,

196
00:10:42.420 --> 00:10:47.420
we can lock this accounts object, or this accounts array

197
00:10:47.500 --> 00:10:48.543
to the console.

198
00:10:49.655 --> 00:10:53.050
And so in there, we should now see our objects

199
00:10:53.050 --> 00:10:55.280
with a new property.

200
00:10:55.280 --> 00:10:58.850
And indeed, we get the username of js.

201
00:10:58.850 --> 00:11:00.623
And this one should be jd,

202
00:11:03.180 --> 00:11:05.630
and here or Stephen Thomas Williams,

203
00:11:05.630 --> 00:11:08.080
and indeed, it is the stw,

204
00:11:08.080 --> 00:11:09.993
that we had previously worked with.

205
00:11:12.200 --> 00:11:15.880
So in this lecture, it was very important to understand

206
00:11:15.880 --> 00:11:19.940
the use case for the map method here, which was perfect,

207
00:11:19.940 --> 00:11:23.170
because it allowed us to create a new simple array,

208
00:11:23.170 --> 00:11:26.110
which only contains the initials of whatever name

209
00:11:26.110 --> 00:11:27.560
it is used on.

210
00:11:27.560 --> 00:11:30.590
And then on the other hand, the for each method,

211
00:11:30.590 --> 00:11:33.080
it was a great use case to produce

212
00:11:33.080 --> 00:11:35.570
some so called side effects.

213
00:11:35.570 --> 00:11:38.530
So in other words, to simply do some work

214
00:11:38.530 --> 00:11:40.470
without returning anything.

215
00:11:40.470 --> 00:11:42.050
And so that's what we did here,

216
00:11:42.050 --> 00:11:45.030
we simply looped over the accounts array,

217
00:11:45.030 --> 00:11:46.330
and in each iteration,

218
00:11:46.330 --> 00:11:49.520
we manipulated the current account object,

219
00:11:49.520 --> 00:11:51.960
and edit a username to it

220
00:11:51.960 --> 00:11:54.700
based on the account owner,

221
00:11:54.700 --> 00:11:56.770
plus all of these transformations

222
00:11:56.770 --> 00:11:58.763
that we had already done before.

223
00:12:00.070 --> 00:12:03.280
So a couple of interesting and important takeaways

224
00:12:03.280 --> 00:12:04.550
from this video.

225
00:12:04.550 --> 00:12:06.730
So make sure to review it properly,

226
00:12:06.730 --> 00:12:10.430
and then let's move on to our next transforming method,

227
00:12:10.430 --> 00:12:12.333
which is the filter method.

