1
00:00:01,510 --> 00:00:05,500
<v Jonas>So we learned about the forEach method on arrays.</v>

2
00:00:05,500 --> 00:00:10,500
However, forEach is also available on maps and sets.

3
00:00:10,960 --> 00:00:13,510
And so let's take a small detour now

4
00:00:13,510 --> 00:00:17,793
and see how forEach works with maps and with sets.

5
00:00:19,450 --> 00:00:21,930
And we're gonna start with maps,

6
00:00:21,930 --> 00:00:25,980
and for that let's cut this currencies map

7
00:00:25,980 --> 00:00:27,333
that we have up here.

8
00:00:30,610 --> 00:00:32,020
All right.

9
00:00:32,020 --> 00:00:36,090
And remember that in this array of arrays,

10
00:00:36,090 --> 00:00:39,870
each of these array elements, so this inner array,

11
00:00:39,870 --> 00:00:42,110
will be one entry of the map,

12
00:00:42,110 --> 00:00:46,330
where this here is the key, and this is the value.

13
00:00:46,330 --> 00:00:47,600
All right.

14
00:00:47,600 --> 00:00:52,600
And so we can call forEach also on a map.

15
00:00:54,460 --> 00:00:59,460
So forEach, and then again, the callback function,

16
00:00:59,640 --> 00:01:03,700
and now this callback function also has three parameters.

17
00:01:03,700 --> 00:01:05,900
So when the forEach method calls it,

18
00:01:05,900 --> 00:01:09,220
it will call this function with three arguments.

19
00:01:09,220 --> 00:01:12,193
So the first one will be the current value,

20
00:01:13,220 --> 00:01:16,010
so the current value in the current iteration,

21
00:01:16,010 --> 00:01:19,500
the second one is the key, and the third one

22
00:01:19,500 --> 00:01:23,820
is the entire map that is being looped over.

23
00:01:23,820 --> 00:01:26,600
And so you see, this is similar to the array,

24
00:01:26,600 --> 00:01:28,530
where in the array,

25
00:01:28,530 --> 00:01:31,990
the first parameter is the current element of the array,

26
00:01:31,990 --> 00:01:33,720
the second one is the index

27
00:01:33,720 --> 00:01:36,350
and the third is the entire array.

28
00:01:36,350 --> 00:01:40,040
And so there is a nice correspondence between these,

29
00:01:40,040 --> 00:01:42,603
and so this is quite easy to memorize here.

30
00:01:43,540 --> 00:01:47,040
And so let's just log a very quick string here.

31
00:01:49,720 --> 00:01:51,780
So this is not really that important,

32
00:01:51,780 --> 00:01:55,810
but I wanted to show you that forEach also exists

33
00:01:55,810 --> 00:01:58,003
on these two new data structures.

34
00:01:59,200 --> 00:02:02,420
Now, okay, and indeed it worked.

35
00:02:02,420 --> 00:02:05,640
So we got the key of each of the map entries

36
00:02:05,640 --> 00:02:08,570
and then also the value.

37
00:02:08,570 --> 00:02:12,703
Alright, and so now let's try the same with a set.

38
00:02:14,070 --> 00:02:18,933
So this is with a map and this is now with a set.

39
00:02:19,780 --> 00:02:23,183
So let's create currenciesUnique.

40
00:02:25,550 --> 00:02:29,500
Let's say, so new set.

41
00:02:29,500 --> 00:02:33,150
And remember that in here, we need to pass an Iterable.

42
00:02:33,150 --> 00:02:36,310
And so I will use an array here.

43
00:02:36,310 --> 00:02:40,283
So let's just create a couple of strings here,

44
00:02:42,030 --> 00:02:46,173
another US dollar, and then some Euros.

45
00:02:49,330 --> 00:02:50,523
Let's just take a look,

46
00:02:52,920 --> 00:02:56,033
and indeed it only has the unique values.

47
00:02:56,900 --> 00:02:58,820
So just as expected,

48
00:02:58,820 --> 00:03:02,903
and so let's now call forEach on this set as well.

49
00:03:04,270 --> 00:03:05,870
So the currenciesUnique.forEach.

50
00:03:08,960 --> 00:03:12,120
And now once again, the callback function

51
00:03:12,120 --> 00:03:16,600
has the parameters of value, key and map,

52
00:03:18,570 --> 00:03:22,283
and we will see in a second, if that actually makes sense.

53
00:03:23,510 --> 00:03:25,183
So let's look to the console.

54
00:03:26,430 --> 00:03:28,030
Actually the same thing as here.

55
00:03:30,960 --> 00:03:33,310
So let's see what's gonna happen.

56
00:03:33,310 --> 00:03:38,013
So remember we are logging the key and the value, okay?

57
00:03:38,960 --> 00:03:43,960
But now we get USD, USD, and here GBP, GBP.

58
00:03:45,670 --> 00:03:48,620
And so what this means is that the key here

59
00:03:48,620 --> 00:03:52,060
is exactly the same as the value.

60
00:03:52,060 --> 00:03:54,240
So why is that?

61
00:03:54,240 --> 00:03:57,880
Well, a set doesn't have keys, right?

62
00:03:57,880 --> 00:04:00,040
And it doesn't have indexes either.

63
00:04:00,040 --> 00:04:04,410
And so there is no value that would make sense for the key.

64
00:04:04,410 --> 00:04:07,460
All right, so essentially this key here

65
00:04:07,460 --> 00:04:09,050
makes no sense at all.

66
00:04:09,050 --> 00:04:11,450
It wouldn't even have to be there.

67
00:04:11,450 --> 00:04:16,450
And so the people who designed this forEach method for sets,

68
00:04:16,520 --> 00:04:20,760
they could have simply omitted the second argument, right?

69
00:04:20,760 --> 00:04:22,860
Well, if they did that,

70
00:04:22,860 --> 00:04:26,600
then this forEach would have been different from the others.

71
00:04:26,600 --> 00:04:30,400
And so that would then create confusion in developers,

72
00:04:30,400 --> 00:04:33,980
and therefore it was decided to keep the same signature.

73
00:04:33,980 --> 00:04:38,080
So basically to keep the same three parameters

74
00:04:38,080 --> 00:04:40,330
in this callback function and simply

75
00:04:40,330 --> 00:04:44,210
to set the second one to the first one.

76
00:04:44,210 --> 00:04:47,523
So we can just write value here as well,

77
00:04:49,470 --> 00:04:51,433
just to avoid that confusion.

78
00:04:53,030 --> 00:04:53,863
All right.

79
00:04:55,250 --> 00:04:56,550
Now, and of course,

80
00:04:56,550 --> 00:05:00,010
we cannot have the duplicate parameter name.

81
00:05:00,010 --> 00:05:02,460
And so we can just use an underscore,

82
00:05:02,460 --> 00:05:05,750
which in JavaScript means a throwaway variable.

83
00:05:05,750 --> 00:05:09,550
So that means a variable that is completely unnecessary.

84
00:05:09,550 --> 00:05:12,460
So it's just a convention which we will see again

85
00:05:12,460 --> 00:05:13,573
a little bit later.

86
00:05:15,610 --> 00:05:17,200
Okay, and so now it should work

87
00:05:18,480 --> 00:05:20,640
and yeah, that's all you need to know

88
00:05:20,640 --> 00:05:24,360
about the forEach method for maps and sets.

89
00:05:24,360 --> 00:05:27,810
So it's very straightforward if you already understood

90
00:05:27,810 --> 00:05:29,493
how it works for arrays.

