-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcode-to-fix.js
More file actions
121 lines (105 loc) · 3.16 KB
/
code-to-fix.js
File metadata and controls
121 lines (105 loc) · 3.16 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
115
116
117
118
119
120
121
'use strict';
const incomesAndExpenses = Object.freeze([
{ value: 2500, description: 'Salary 💰', familyMember: 'youra' },
{ value: -1200, description: 'Buying iPhone 📱', familyMember: 'youra' },
{
value: 50,
description: 'Sold the old refrigerator 🧊',
familyMember: 'ira',
},
{ value: -40, description: 'Buying groceries 🛒', familyMember: 'ira' },
{ value: 500, description: 'Freelance income 💰', familyMember: 'youra' },
{ value: 1200, description: 'Salary 💰', familyMember: 'ira' },
{ value: -50, description: 'Buying a handbag 👜', familyMember: 'ira' },
{ value: -105, description: 'Buying a dress 👗', familyMember: 'ira' },
{ value: -2300, description: 'Buying Macbook 💻', familyMember: 'youra' },
]);
const expenseLimits = Object.freeze({
youra: 1500,
ira: 1100,
});
const getExpenseLimit = (familyMember, limits) => limits?.[familyMember] ?? 0;
// Чистая функция
const addExpense = function (
state,
limits,
value,
description,
familyMember = 'ira'
) {
const lowerCaseFamilyMember = familyMember.toLowerCase();
// const expenseLimit = expenseLimits[familyMember]
// ? expenseLimits[familyMember]
// : 0;
return value <= getExpenseLimit(lowerCaseFamilyMember, limits)
? [
...state,
{
value: -value,
description: description,
familyMember: lowerCaseFamilyMember,
},
]
: state;
};
const incomesAndExpenses1 = addExpense(
incomesAndExpenses,
expenseLimits,
20,
'Sushi 🍱'
);
console.log(incomesAndExpenses1);
const incomesAndExpenses2 = addExpense(
incomesAndExpenses1,
expenseLimits,
10,
'Going to cinema 🍿',
'YouRa'
);
console.log(incomesAndExpenses2);
const incomesAndExpenses3 = addExpense(
incomesAndExpenses2,
expenseLimits,
200,
'Something',
'John'
);
console.log(incomesAndExpenses3);
// const checkExpenses = function (state, limits) {
// return state.map(item =>
// item.value < -getExpenseLimit(item.familyMember, limits)
// ? { ...item, flag: 'limit' }
// : item
// );
// // for (const item of state)
// // if (item.value < -getExpenseLimit(item.familyMember, limits)) item.flag = 'limit';
// };
const checkExpenses = (state, limits) =>
state.map(item =>
item.value < -getExpenseLimit(item.familyMember, limits)
? { ...item, flag: 'limit' }
: item
);
const incomesAndExpenses4 = checkExpenses(incomesAndExpenses3, expenseLimits);
console.log(incomesAndExpenses4);
const printVeryBigExpenses = function (state, limit) {
// const output = state
// .filter(item => item.value <= -limit)
// .map(item => item.description.slice(-2))
// .join(' / ');
const output = state
.filter(item => item.value <= -limit)
.reduce(
(outputString, currentItem) =>
`${outputString} / ${currentItem.description.slice(-2)}`,
''
)
.substring(2);
console.log(output);
// let output = '';
// for (const item of incomesAndExpenses)
// output += item.value <= -limit ? `${item.description.slice(-2)} / ` : '';
// output = output.slice(0, -2);
// console.log(output);
};
printVeryBigExpenses(incomesAndExpenses4, 100);