-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathhigh-order-function.js
More file actions
114 lines (92 loc) · 3.2 KB
/
high-order-function.js
File metadata and controls
114 lines (92 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
var triple = function(x) {
return x * 3;
}
var waffle = triple;
var result = waffle(30);
console.log(result);
const animals = [
{ name: 'Fluffykins', species: 'rabbit' },
{ name: 'Caro', species: 'dog' },
{ name: 'Hamilton', species: 'dog' },
{ name: 'Harold', species: 'fish' },
{ name: 'Ursula', species: 'cat' },
{ name: 'Jimmy', species: 'fish' },
]
/* hof function */
const isDog = function(animal) {
return animal.species === 'dog';
};
const isCat = function(animal) {
return animal.species === 'cat';
};
const dogsAdvance = animals.filter(isDog);
const catAdvance = animals.filter(isCat);
console.log('advance function dogs: ', dogsAdvance);
console.log('advance function cat: ', catAdvance);
/* ========== grade =======
Tìm thứ hạng trung bình của cả lớp
Tìm thứ hạng trung bình của nam trong lớp
Tìm thứ hạng trung bình của Nữ trong lớp
Tìm thứ hạng cao nhất của Nam trong lớp
Tìm thứ hạng cao nhất của Nữ trong lớp
Tìm thứ hạng thấp nhất của Nam trong lớp
Tìm thứ hạng thấp nhất của Nữ trong lớp
Tìm thứ hạng cao nhất của cả lớp
Tìm thứ hạng thấp nhất của cả lớp
*/
const grades = [
{name: 'John', grade: 8, sex: 'M'},
{name: 'Sarah', grade: 12, sex: 'F'},
{name: 'Bob', grade: 16, sex: 'M'},
{name: 'Johnny', grade: 2, sex: 'M'},
{name: 'Ethan', grade: 4, sex: 'M'},
{name: 'Paula', grade: 18, sex: 'F'},
{name: 'Donald', grade: 5, sex: 'M'},
{name: 'Jennifer', grade: 13, sex: 'F'},
{name: 'Courtney', grade: 15, sex: 'F'},
{name: 'Jane', grade: 9, sex: 'F'}
];
const isMale = (grade) => grade.sex == 'M';
const isFemale = (grade) => grade.sex == "F";
const getBoys = (dataSource = []) => dataSource.filter(isMale);
const getGirls = (dataSource = []) => dataSource.filter(isFemale);
const menGrades = grades.filter(isMale);
const womenGrades = grades.filter(isFemale);
const average = (dataSource = []) => dataSource.reduce((acc, curr) => {
return acc + curr.grade;
}, 0) / grades.length;
const maxGradesCommon = (dataSource = []) => dataSource.reduce((acc, curr) => {
return acc.grade > curr.grade ? acc : curr;
}, {} )
const minGradesCommon = (dataSource = []) => dataSource.reduce((acc, curr) => {
return acc.grade < curr.grade ? acc : curr;
}, {} )
// tính trung binh
const averageGrades = average(grades)
// trung bình nam trong lớp
const averageMenGrades = average(getBoys(grades));
// trung bình nữ trong lớp
const averageWomenGrades = average(womenGrades);
// cao nhất lớp
const maxGrades = maxGradesCommon(grades);
// cao nhất nam trong lớp
const maxMenGrades = maxGradesCommon(menGrades)
// cao nhất nữ trong lớp
const maxWomenGrades = maxGradesCommon(womenGrades)
// thấp nhất nam trong lớp
const minMenGrades = minGradesCommon(menGrades)
// thấp nhất nữ trong lớp
const minWomenGrades = minGradesCommon(womenGrades)
// thấp nhất lớp
const minGrade = minGradesCommon(grades);
console.log('class: ', {
averageGrades,
maxGrades,
minGrade,
averageMenGrades,
averageWomenGrades,
maxMenGrades,
minWomenGrades,
minMenGrades
})
const maxGrade = grades => Math.max(...grades.map(student => student.grade))