Ik ben hobby-scripter/wannabe-developer, keep that in mind
Dat gezegd hebbende vind ik letterlijk alles waarover je feedback wil geven prima hoor, geen probleem. Zelfs als je met een enkele regel komt die alles doet wat ik heb gemaakt, dan kun je dat zeggen
Leer ik alleen maar van. Goed, het gaat om het volgende. Ik heb een stukje code geschreven met daarin een functie. In die functie zit een loop met daarin weer een loop. Volgens mij prima want ik wil voor elke arraywaarde (object) (moederloop) meerdere mogelijkheden uitrekenen, wat ik dus met de tweede loop doe (kindloop
). Het werkt en geeft de gewenste output. Alleen....ik vind dat de leesbaarheid te wensen over laat. Wellicht door de vele losse comments (juist een poging tot documenteren) maar ik heb het gevoel dat een loop in een loop in een functie ook niet helpt. Daarom vroeg ik mij af, is het voor de leesbaarheid handiger dat ik de diepste loop eruit haal en in een eigen functie stop? Ik heb de zoekmachine geraadpleegd voor meningen en advies op internet maar niks gevonden. Het maken is niet het probleem, ik ben meer op zoek naar feedback van mensen met ervaring.
Let op: dit is alleen die functie. hoursInBlock is een integer die aangeeft hoeveel uur in een aaneengesloten blok moeten zitten.
Let op: dit is alleen die functie. hoursInBlock is een integer die aangeeft hoeveel uur in een aaneengesloten blok moeten zitten.
code:
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
| function findCheapestHours(hoursInBlock) {
let calculatedPrice
let consecutiveHourCount
let bestPricedBlockStart
let arrayHour
let nextHour
let epochSecondsToAdd = 0
let sumHourPrices = 0
//For every hour in array
for (
var arrayCount = 0;
arrayCount <= price_array.length - hoursInBlock;
arrayCount++
) {
sumHourPrices = 0
arrayHour = price_array[arrayCount]
//Calculate average price for coming <hoursInBlock> hours
for (
consecutiveHourCount = 0;
consecutiveHourCount < hoursInBlock;
consecutiveHourCount++
) {
//Add 3600 seconds for every extra consecutive hour
epochSecondsToAdd = consecutiveHourCount * 3600
//Find next hour in price array based on extra added 3600 seconds
nextHour = price_array.findIndex(
(object) =>
new Date(object.startsAt).getTime() == new Date(arrayHour.startsAt).getTime() + (epochSecondsToAdd * 1000)
)
sumHourPrices += price_array[nextHour].total
}
//Calculate average price by dividing sum of prices by amount of hours
calculatedPrice = sumHourPrices / hoursInBlock
//If calculated average price is lower than already stored calculated price
if (
bestPricedBlockStart == null || calculatedPrice < bestPricedBlockStart.total
) {
//Store current hour as best priced to start action
bestPricedBlockStart = arrayHour
}
}
console.log("Definitieve beste start: " + bestPricedBlockStart.startsAt)
return bestPricedBlockStart
} |
3600wp@115° oost | 825wp panels/750wp inv@13°/115° oost | 1475wp panels/1250wp inv@27°/205° graden zuid
Ecodan warmtepomp
Repo's: HA-Solar-control | HA-heatpump-planning | NR-HueTapDial-NextLevel
:strip_exif()/f/image/rTj8uWsk9wLgjRN6qGy1lJmH.png?f=user_large)
:strip_exif()/f/image/C9trjjJqFSZ9GlQ8pdQwPyDf.png?f=user_large)