-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpipe.js
157 lines (125 loc) · 4.18 KB
/
pipe.js
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
import fetch from "node-fetch";
import chalk from "chalk";
import { stdout } from "process";
// Implementacija pipe funkcije
const pipe =
(...functions) =>
(initialValue) => {
let result;
for (let i = 0; i < functions.length; i++) {
if (i == 0) {
result = { ...functions[i](initialValue) };
} else {
result = { ...functions[i](result) };
}
}
return result;
};
/**
* Primjer 1.1. - Dohvaćanje pronalaženje podataka korisnika i albuma
*
* Doohvaća se 100 albuma, 10 korisnika i 5000 podatak o slikama albuma.
* Trebaju se izvršiti sljedeće funkcije:
* --> Za svakog korisnika pronaći njegove albume
* --> Svakom albumu pridružiti njegovu sliku
* --> Provjeriti je li ime albuma napisano velikim početnim slovom
* --> Ispisati nazive albuma i url-ove do njihvih prvog korisnika
*/
console.log("-----------------------------");
console.log("Primjer .pipe() funkcije na primjeru korisnika i albuma");
console.log("-----------------------------\n");
let albumsArray = await fetch("https://jsonplaceholder.typicode.com/albums")
.then((response) => response.json())
.then((json) => {
return json;
});
console.log("Dohvaćeno je ", albumsArray.length, " albuma!");
console.log("Dohvaćeni albumi su sljedećeg oblika:");
console.log(albumsArray[15]);
let usersArray = await fetch("https://jsonplaceholder.typicode.com/users")
.then((response) => response.json())
.then((json) => {
return json;
});
console.log("\nDohvaćeno je ", usersArray.length, " Korisnika!");
console.log("Dohvaćeni korisnici su sljedećeg oblika:");
console.log(usersArray[0]);
let photosArray = await fetch("https://jsonplaceholder.typicode.com/photos")
.then((response) => response.json())
.then((json) => {
return json;
});
console.log("\nDohvaćeno je ", photosArray.length, " slika!");
console.log("Dohvaćene slike su sljedećeg oblika:");
console.log(photosArray[0]);
function spojiKorisnikeSaAlbumima({ korisnici, albumi, slike }) {
let korisniciAlbumi = korisnici.map((korisnik) => {
korisnik.albums = [];
albumi.forEach((album) => {
if (korisnik.id == album.userId) {
korisnik.albums = [
...korisnik.albums,
{ id: album.id, title: album.title },
];
}
});
return korisnik;
});
return { korisnici: korisniciAlbumi, slike };
}
function ProvjeriNaziveAlbuma({ korisnici, slike }) {
let korisniciAlbumi = korisnici.map((korisnik) => {
korisnik.albums = korisnik.albums.map((album) => {
if (!ProvjeriVelikoPocetnoSlovo(album.title)) {
album.title = PostaviiVelikoPocetnoSlovo(album.title);
}
return album;
});
return korisnik;
});
return { korisnici: korisniciAlbumi, slike };
}
function ProvjeriVelikoPocetnoSlovo(rijec) {
return rijec.charAt(0) === rijec.charAt(0).toUpperCase();
}
function PostaviiVelikoPocetnoSlovo(rijec) {
return rijec.charAt(0).toUpperCase() + rijec.slice(1);
}
function SpojiAlbumeSaSlikama({ korisnici, slike }) {
let korisniciSlike = korisnici.map((korisnik) => {
korisnik.albums = korisnik.albums.map((album) => {
album.slika = slike.find((slika) => (slika.albumId = album.id)).url;
return album;
});
return korisnik;
});
return korisniciSlike;
}
function IspisiNaziveAlbuma(korisnici) {
console.log("\n\nFinalni rezultat pipe funkcije je:\n");
korisnici[0].albums.forEach((album) => {
stdout.write(`Slika albuma || `);
stdout.write(chalk.bold(`${album.title}`));
stdout.write(` || dostupna je na: `);
stdout.write(chalk.blueBright(`${album.slika} \n`));
});
}
/**
* TESTIRANJE FUNKKCIJA
*/
// U ovom dijelu se funkcije izvršavaju redeom kako je definirano u opisu
let rezultat_1 = spojiKorisnikeSaAlbumima({
korisnici: usersArray,
albumi: albumsArray,
slike: photosArray,
});
let rezultat_2 = ProvjeriNaziveAlbuma(rezultat_1);
let rezultat_3 = SpojiAlbumeSaSlikama(rezultat_2);
IspisiNaziveAlbuma(rezultat_3);
// U nastavku slijedi izvršavanje svih funkcije pomoću pipe funkcije
pipe(
spojiKorisnikeSaAlbumima,
ProvjeriNaziveAlbuma,
SpojiAlbumeSaSlikama,
IspisiNaziveAlbuma
)({ korisnici: usersArray, albumi: albumsArray, slike: photosArray });