1
00:00:01,280 --> 00:00:03,040
<v Jonas>So we're getting closer</v>

2
00:00:03,040 --> 00:00:04,940
to the end of this section

3
00:00:04,940 --> 00:00:09,370
but there are still a couple of array methods left to learn.

4
00:00:09,370 --> 00:00:10,460
And so in this lecture,

5
00:00:10,460 --> 00:00:13,823
we're gonna look at the some and the every methods.

6
00:00:15,740 --> 00:00:18,860
And to start learning about the some method,

7
00:00:18,860 --> 00:00:21,523
let's look back at the includes method

8
00:00:21,523 --> 00:00:23,023
that we studied earlier.

9
00:00:24,440 --> 00:00:29,440
So let's log to the console here movements.includes -130.

10
00:00:34,340 --> 00:00:37,730
And let's also log our movements array so we can see it

11
00:00:39,370 --> 00:00:44,370
and so indeed, the value of -140 that we're testing here

12
00:00:45,330 --> 00:00:46,990
is in the array

13
00:00:46,990 --> 00:00:49,340
and that's why we get true here.

14
00:00:49,340 --> 00:00:51,700
And so we can use the includes method

15
00:00:51,700 --> 00:00:55,720
to test if an array includes a certain value.

16
00:00:55,720 --> 00:01:00,720
Now, however, we can only really test for equality, right?

17
00:01:01,140 --> 00:01:04,790
So basically includes here returns true

18
00:01:04,790 --> 00:01:09,790
if any value in the array is exactly equal to -130, right?

19
00:01:11,650 --> 00:01:16,180
And so again, this is essentially testing for equality

20
00:01:16,180 --> 00:01:20,540
but what if we wanted to test for a condition instead?

21
00:01:20,540 --> 00:01:23,973
And so that's where this some method comes into play.

22
00:01:25,720 --> 00:01:29,090
So let's say that we would like to know

23
00:01:29,090 --> 00:01:32,700
if there has been any deposits on this account.

24
00:01:32,700 --> 00:01:34,530
So in other words, we want to know

25
00:01:34,530 --> 00:01:38,230
if there is any positive movement in this array.

26
00:01:38,230 --> 00:01:40,600
So any number above zero.

27
00:01:40,600 --> 00:01:42,163
So how would we do that?

28
00:01:44,020 --> 00:01:48,530
Well, we can say movements.some

29
00:01:48,530 --> 00:01:52,960
and now we can specify our condition here as always.

30
00:01:52,960 --> 00:01:55,200
So the same callback function,

31
00:01:55,200 --> 00:01:58,083
which has to return either true or false.

32
00:01:59,690 --> 00:02:04,690
And so a deposit is a movement greater than zero.

33
00:02:06,990 --> 00:02:09,000
So let's call this here anyDeposits

34
00:02:15,160 --> 00:02:16,873
and log it to a console.

35
00:02:19,780 --> 00:02:22,240
And so indeed here we get true.

36
00:02:22,240 --> 00:02:26,070
So we have, of course, more than one deposits here.

37
00:02:26,070 --> 00:02:27,290
But let's say we wanted to test

38
00:02:27,290 --> 00:02:30,903
if there is any deposit above 5,000.

39
00:02:32,970 --> 00:02:35,840
So easy enough, we can check if there is something

40
00:02:35,840 --> 00:02:39,880
above this value and then it is false.

41
00:02:39,880 --> 00:02:43,773
Or we can check if these is something above 1,500.

42
00:02:44,800 --> 00:02:48,510
And so now it's true because there is one movement here

43
00:02:48,510 --> 00:02:50,083
in that condition.

44
00:02:50,930 --> 00:02:53,250
And so you can see that these two methods here

45
00:02:53,250 --> 00:02:55,280
are kind of similar.

46
00:02:55,280 --> 00:02:58,783
The difference is that here it checks only for equality.

47
00:03:00,380 --> 00:03:05,380
So equality but here, we can specify a condition now, right?

48
00:03:08,210 --> 00:03:10,540
So basically, this one here,

49
00:03:10,540 --> 00:03:14,173
we could rewrite it like this.

50
00:03:15,340 --> 00:03:17,213
So let's log it to the console here.

51
00:03:18,730 --> 00:03:22,293
So movements.some,

52
00:03:27,690 --> 00:03:29,130
minus 130.

53
00:03:29,130 --> 00:03:31,310
So this would be exactly the same.

54
00:03:31,310 --> 00:03:35,200
And so that's why we also get true in this one.

55
00:03:35,200 --> 00:03:37,920
Now, for equality, this doesn't make much sense.

56
00:03:37,920 --> 00:03:40,670
We could then simply use the includes method

57
00:03:40,670 --> 00:03:45,033
but for the case we need a condition like this one here,

58
00:03:46,190 --> 00:03:48,100
or really this one,

59
00:03:48,100 --> 00:03:52,440
then the some method is perfect for that, okay?

60
00:03:52,440 --> 00:03:55,700
And probably if I would have named this method,

61
00:03:55,700 --> 00:03:57,883
I would have called it like any.

62
00:03:59,140 --> 00:04:01,410
But of course, that's not the real name

63
00:04:01,410 --> 00:04:03,060
but that's really what it does.

64
00:04:03,060 --> 00:04:05,830
And so if there is any value

65
00:04:05,830 --> 00:04:07,950
for which this condition is true,

66
00:04:07,950 --> 00:04:10,810
then the some method will return true.

67
00:04:10,810 --> 00:04:15,220
Now, right and now let's actually use this some method

68
00:04:15,220 --> 00:04:18,360
to implement our missing functionality,

69
00:04:18,360 --> 00:04:21,023
which is to request a loan to the bank.

70
00:04:22,640 --> 00:04:27,240
So we will do that right here

71
00:04:27,240 --> 00:04:32,240
between the transfer button and the close button.

72
00:04:32,390 --> 00:04:34,560
And the some method will become helpful

73
00:04:34,560 --> 00:04:36,340
for this loan feature

74
00:04:36,340 --> 00:04:38,020
because our bank has a rule,

75
00:04:38,020 --> 00:04:40,450
which says that it only grants a loan

76
00:04:40,450 --> 00:04:43,170
if there at least one deposit

77
00:04:43,170 --> 00:04:47,590
with at least 10% of the requested loan amount.

78
00:04:47,590 --> 00:04:49,260
So that sounds complicated

79
00:04:49,260 --> 00:04:52,240
but we will implement this here in a second.

80
00:04:52,240 --> 00:04:55,283
So btnLoan.addEventListener click

81
00:04:59,860 --> 00:05:02,963
and this is now always the same as you can see.

82
00:05:05,770 --> 00:05:09,930
So starting by preventing the default action,

83
00:05:09,930 --> 00:05:12,690
so that's always gonna be the first thing

84
00:05:12,690 --> 00:05:16,560
and then let's have a look here at the user interface

85
00:05:16,560 --> 00:05:19,303
because right now it is hidden.

86
00:05:20,520 --> 00:05:23,163
So you see that here we only have this one field.

87
00:05:24,400 --> 00:05:28,297
And this field is called the inputLoanAmount, okay?

88
00:05:30,432 --> 00:05:34,010
So inputLoanAmount, so that's the element

89
00:05:34,010 --> 00:05:36,373
with this long class name.

90
00:05:37,440 --> 00:05:39,493
So let's copy that actually.

91
00:05:43,360 --> 00:05:46,253
And so let's start by actually getting that amount here.

92
00:05:49,420 --> 00:05:50,950
So we already know we will have

93
00:05:50,950 --> 00:05:54,647
to convert this input .value, okay?

94
00:05:58,090 --> 00:06:02,010
And now we need to create our condition here.

95
00:06:02,010 --> 00:06:03,040
So first of all,

96
00:06:03,040 --> 00:06:07,660
that amount should be greater than zero, okay?

97
00:06:07,660 --> 00:06:10,843
And now let's take a look here at our flow chart again.

98
00:06:11,950 --> 00:06:14,400
So this is what I was saying earlier.

99
00:06:14,400 --> 00:06:18,670
The loan is only granted if there is any deposit

100
00:06:18,670 --> 00:06:23,573
that's greater or equal 10% of the requested amount of loan.

101
00:06:26,280 --> 00:06:27,113
Now, right?

102
00:06:28,400 --> 00:06:30,800
So here we need now our second condition,

103
00:06:30,800 --> 00:06:33,100
which translates that.

104
00:06:33,100 --> 00:06:37,350
And so whenever we see or hear the word any,

105
00:06:37,350 --> 00:06:40,550
we can already know that it's probably a good use case

106
00:06:40,550 --> 00:06:42,990
for the some method.

107
00:06:42,990 --> 00:06:44,283
So let me show it to you.

108
00:06:45,150 --> 00:06:47,740
So as always, we get the movements

109
00:06:47,740 --> 00:06:52,220
from the currentAccount object .movements

110
00:06:52,220 --> 00:06:55,193
and now on there, we call the some method.

111
00:06:56,040 --> 00:06:59,060
So we already know by now

112
00:06:59,060 --> 00:07:02,960
how this callback function feature here works.

113
00:07:02,960 --> 00:07:04,700
So we get the current movement

114
00:07:04,700 --> 00:07:06,890
in the current iteration

115
00:07:06,890 --> 00:07:10,530
and now here the condition is that movement needs

116
00:07:10,530 --> 00:07:15,113
to be greater or equal than 10% of the amount.

117
00:07:16,400 --> 00:07:20,150
So that's the amount divided by 10.

118
00:07:20,150 --> 00:07:21,530
Okay?

119
00:07:21,530 --> 00:07:24,330
Or we could also do times 0.1

120
00:07:25,440 --> 00:07:27,890
and so that's exactly the same thing.

121
00:07:27,890 --> 00:07:31,290
So 0.1 here stands for 10%

122
00:07:31,290 --> 00:07:33,353
and so let's keep it like this.

123
00:07:35,310 --> 00:07:38,760
Give it a save so that it looks nicer

124
00:07:38,760 --> 00:07:42,840
and so yeah, if at least one of the elements

125
00:07:42,840 --> 00:07:46,030
in the movements array has this condition,

126
00:07:46,030 --> 00:07:50,950
so it's true, so basically it's greater than 10%

127
00:07:50,950 --> 00:07:52,690
of the requested amount,

128
00:07:52,690 --> 00:07:56,040
then all of this here will become true.

129
00:07:56,040 --> 00:07:58,380
And so the some method is perfect

130
00:07:58,380 --> 00:08:01,100
to be used in a condition like this.

131
00:08:01,100 --> 00:08:05,230
So when we need to test for something, okay?

132
00:08:05,230 --> 00:08:07,450
So in case this is true.

133
00:08:07,450 --> 00:08:10,163
Oh and I closed our flow chart again.

134
00:08:12,320 --> 00:08:14,670
So in case this is true,

135
00:08:14,670 --> 00:08:18,320
then add a positive movement to the current data

136
00:08:18,320 --> 00:08:19,997
and update the UI.

137
00:08:21,830 --> 00:08:23,423
So that's easy enough.

138
00:08:25,120 --> 00:08:27,320
So add the movement here.

139
00:08:30,671 --> 00:08:35,671
So currentAccount.movements.push

140
00:08:36,020 --> 00:08:39,293
and then of course, the amount that was requested.

141
00:08:40,810 --> 00:08:43,081
And then update the UI

142
00:08:43,081 --> 00:08:46,060
and for that, we already created our nice function,

143
00:08:46,060 --> 00:08:49,180
which does all of the functionalities in one go.

144
00:08:49,180 --> 00:08:50,780
And so that's updateUI

145
00:08:52,110 --> 00:08:56,020
and we simply pass the currentAccount into it.

146
00:08:56,020 --> 00:08:57,230
Okay.

147
00:08:57,230 --> 00:08:58,639
And that's it.

148
00:08:58,639 --> 00:09:03,137
Finally, let's also then clear the input field.

149
00:09:06,520 --> 00:09:10,363
So that value equals empty value.

150
00:09:11,590 --> 00:09:16,273
So we did that here and here and also up here.

151
00:09:20,580 --> 00:09:21,413
Okay.

152
00:09:22,660 --> 00:09:23,683
Let's log in.

153
00:09:27,230 --> 00:09:30,850
And so you see, my deposits, my largest deposit

154
00:09:30,850 --> 00:09:35,850
is 3,000 and so the loan that I can request

155
00:09:36,729 --> 00:09:41,120
can be maximum 30,000, okay?

156
00:09:41,120 --> 00:09:44,313
Because 3,000 here is 10% of that.

157
00:09:45,550 --> 00:09:47,720
So let me try something bigger.

158
00:09:47,720 --> 00:09:49,373
So something really huge.

159
00:09:51,200 --> 00:09:52,903
And so now nothing happened.

160
00:09:53,750 --> 00:09:55,330
And again in the real world,

161
00:09:55,330 --> 00:09:58,240
we would then probably get some error message

162
00:09:58,240 --> 00:10:01,000
somewhere here at the top or so

163
00:10:01,000 --> 00:10:04,010
but in this case, we're not gonna do that.

164
00:10:04,010 --> 00:10:06,560
Let's just try 5,000 now.

165
00:10:06,560 --> 00:10:10,990
And so now indeed it appeared here in our movements

166
00:10:10,990 --> 00:10:13,700
and also as you see, our balance was updated

167
00:10:14,820 --> 00:10:17,707
and also here our total income.

168
00:10:19,840 --> 00:10:20,800
Okay?

169
00:10:20,800 --> 00:10:24,080
Now let's request 50,000

170
00:10:25,900 --> 00:10:28,220
and so with this, you can now actually cheat.

171
00:10:28,220 --> 00:10:31,343
You can always create a little bit of a larger number.

172
00:10:32,350 --> 00:10:34,680
So now I can even request half a million

173
00:10:36,160 --> 00:10:39,200
and so that's cheating our algorithm,

174
00:10:39,200 --> 00:10:41,850
which is way too simple.

175
00:10:41,850 --> 00:10:45,410
But of course, this is just for testing purposes.

176
00:10:45,410 --> 00:10:46,243
All right.

177
00:10:47,410 --> 00:10:50,590
So that's how the some method works.

178
00:10:50,590 --> 00:10:52,203
I hope that makes sense.

179
00:10:53,370 --> 00:10:55,560
And so let's now actually go back here

180
00:10:55,560 --> 00:10:59,140
and talk about the close cousin of the some method,

181
00:10:59,140 --> 00:11:02,313
which is the every method.

182
00:11:05,310 --> 00:11:08,090
So let's write here some

183
00:11:10,860 --> 00:11:12,400
and every.

184
00:11:12,400 --> 00:11:15,510
So again, the every method is pretty similar

185
00:11:15,510 --> 00:11:17,070
to the some method

186
00:11:17,070 --> 00:11:20,240
but as you might guess, the difference between them

187
00:11:20,240 --> 00:11:23,000
is that every only returns true

188
00:11:23,000 --> 00:11:26,893
if all of the elements in the array satisfy the condition

189
00:11:26,893 --> 00:11:28,610
that we pass in.

190
00:11:28,610 --> 00:11:32,550
So in other words, if every element passes the test

191
00:11:32,550 --> 00:11:34,270
in our callback function,

192
00:11:34,270 --> 00:11:37,210
only then the every method returns true

193
00:11:37,210 --> 00:11:40,440
and that's why the method is called every

194
00:11:40,440 --> 00:11:42,160
in the first place.

195
00:11:42,160 --> 00:11:44,073
So let's test it out here now.

196
00:11:45,340 --> 00:11:49,930
So let's log to the console movements.every

197
00:11:52,740 --> 00:11:55,090
and then with the same condition.

198
00:11:55,090 --> 00:11:57,120
So let's essentially check

199
00:11:57,120 --> 00:12:00,590
if all of our movements here are deposits

200
00:12:01,600 --> 00:12:04,010
and well, indeed, they are not

201
00:12:04,010 --> 00:12:06,070
and that's why we get false.

202
00:12:06,070 --> 00:12:08,440
However, we do have one account,

203
00:12:08,440 --> 00:12:10,363
which only has positive moments.

204
00:12:12,940 --> 00:12:15,430
So let me show that to you.

205
00:12:15,430 --> 00:12:17,360
That's account4.

206
00:12:17,360 --> 00:12:21,490
So account4, all the movements are positive.

207
00:12:21,490 --> 00:12:23,443
So let's check it out now.

208
00:12:26,600 --> 00:12:29,880
So account4 and then the same condition

209
00:12:32,400 --> 00:12:34,240
and every is not a function

210
00:12:34,240 --> 00:12:35,540
and that's, of course,

211
00:12:35,540 --> 00:12:38,253
because we are still missing the movements array.

212
00:12:40,060 --> 00:12:42,900
And now it is true, all right?

213
00:12:42,900 --> 00:12:46,530
And so that indeed proves that the every returns true

214
00:12:46,530 --> 00:12:50,330
if all the elements in the array satisfy this condition

215
00:12:50,330 --> 00:12:52,220
because in this movements array,

216
00:12:52,220 --> 00:12:57,170
all of the values are in fact above zero, okay?

217
00:12:57,170 --> 00:12:59,710
So that's how the every method works

218
00:12:59,710 --> 00:13:02,953
and I think it's quite straightforward, isn't it?

219
00:13:03,790 --> 00:13:06,560
And now to finish, there is now more cool thing

220
00:13:06,560 --> 00:13:08,190
that I want to show you.

221
00:13:08,190 --> 00:13:09,980
So up until this point,

222
00:13:09,980 --> 00:13:13,280
we have always written the callback function directly

223
00:13:13,280 --> 00:13:17,100
as an argument into our array methods, right?

224
00:13:17,100 --> 00:13:21,120
However, we could also write this function separately

225
00:13:21,120 --> 00:13:23,823
and then pass the function as a callback.

226
00:13:25,100 --> 00:13:26,260
So let's say

227
00:13:29,560 --> 00:13:30,890
separate callback

228
00:13:32,120 --> 00:13:34,143
and so we could do this.

229
00:13:35,170 --> 00:13:38,943
So let's call deposit to this function.

230
00:13:42,680 --> 00:13:43,810
All right?

231
00:13:43,810 --> 00:13:47,930
And so this function here is exactly the same as these ones

232
00:13:47,930 --> 00:13:49,250
but as I just said,

233
00:13:49,250 --> 00:13:53,580
there is no reason for them to being directly written here

234
00:13:53,580 --> 00:13:55,600
in all of these array methods.

235
00:13:55,600 --> 00:13:57,830
We could simply write them like this

236
00:13:57,830 --> 00:14:00,960
and then all we would have to do

237
00:14:00,960 --> 00:14:05,940
is to call movements.some, for example,

238
00:14:05,940 --> 00:14:09,040
and then deposits or deposit.

239
00:14:09,040 --> 00:14:11,250
And now we could reuse the same function

240
00:14:11,250 --> 00:14:13,590
for all kinds of different methods

241
00:14:13,590 --> 00:14:17,540
that require callbacks with a true/false condition.

242
00:14:17,540 --> 00:14:22,173
So that could be every or filter as well.

243
00:14:23,800 --> 00:14:25,340
Okay?

244
00:14:25,340 --> 00:14:29,960
And so here is the result of these three operations

245
00:14:29,960 --> 00:14:32,770
and so here we get the expected results.

246
00:14:32,770 --> 00:14:35,960
And all by reusing the same function.

247
00:14:35,960 --> 00:14:37,980
Then if we wanted to change the function,

248
00:14:37,980 --> 00:14:42,200
all we would have to do is to change it here in one place

249
00:14:42,200 --> 00:14:43,580
and then all the results

250
00:14:43,580 --> 00:14:46,253
would become different according to that.

251
00:14:47,810 --> 00:14:50,980
So in practice, that's something that we do sometimes

252
00:14:50,980 --> 00:14:54,970
because this is, of course, better for the DRY principle.

253
00:14:54,970 --> 00:14:56,850
So don't repeat yourself.

254
00:14:56,850 --> 00:15:01,400
That's always important and it is important here as well.

255
00:15:01,400 --> 00:15:05,280
But anyway, with this small detour that we did here,

256
00:15:05,280 --> 00:15:09,193
let's now move on to learning about two more array methods.

