-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmanipulate-entries.js
61 lines (56 loc) · 1.44 KB
/
manipulate-entries.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
function filterEntries(obj, filter) {
let res = {};
for (let key in obj) {
if (filter([key, obj[key]])) {
res[key] = obj[key];
}
}
return res;
}
function mapEntries(entries, mapper) {
let temp = {};
for (let key in entries) {
temp[key] = mapper([key, entries[key]]);
}
let res = {};
for (let key in temp) {
res[temp[key][0]] = temp[key][1];
}
return res;
}
function reduceEntries(entries, reducer, initialValue) {
let acc = initialValue;
for (let key in entries) {
acc = reducer(acc, [key, entries[key]]);
}
return acc;
}
function lowCarbs(entries) {
// prettier-ignore
return filterEntries(entries, (entry) => {let value = (nutritionDB[entry[0]]["carbs"] / 100) * entry[1];return parseInt(value) <= 50;});
}
function totalCalories(entries) {
return Number(
reduceEntries(
entries,
(acc, curr) => {
let value = (nutritionDB[curr[0]]["calories"] / 100) * curr[1];
return acc + value;
},
0
).toFixed(1)
);
}
function cartTotal(entries) {
let res = {};
for (let key in entries) {
res[key] = {};
for (let dbKey in nutritionDB[key]) {
res[key][dbKey] =
Math.round(
(entries[key] / 100) * nutritionDB[key][dbKey] * 1000
) / 1000;
}
}
return res;
}