Skip to content

Commit 4a59371

Browse files
authored
Merge pull request #68 from jekku/reduce-immutable
Adds immutable solution using Array.reduce
2 parents e587257 + aeb7dcb commit 4a59371

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

javascript/reduce-immutable.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
const sections = [
2+
{
3+
title: 'Getting started',
4+
reset_lesson_position: false,
5+
lessons: [{ name: 'Welcome' }, { name: 'Installation' }],
6+
},
7+
{
8+
title: 'Basic operator',
9+
reset_lesson_position: false,
10+
lessons: [
11+
{ name: 'Addition / Subtraction' },
12+
{ name: 'Multiplication / Division' },
13+
],
14+
},
15+
{
16+
title: 'Advanced topics',
17+
reset_lesson_position: true,
18+
lessons: [{ name: 'Mutability' }, { name: 'Immutability' }],
19+
},
20+
]
21+
22+
const lessonReducer = (({lessonCounter, result}, lesson) => {
23+
const updatedLesson = {
24+
position: lessonCounter + 1,
25+
...lesson
26+
}
27+
return {lessonCounter: lessonCounter + 1, result: [...result, updatedLesson]}
28+
})
29+
30+
const sectionReducer = ({lessonCounter, result}, section, index) => {
31+
const { reset_lesson_position, lessons } = section
32+
const nextLessonCounter = reset_lesson_position ? 0 : lessonCounter
33+
const updatedLessons = lessons.reduce(
34+
lessonReducer,
35+
{lessonCounter: nextLessonCounter, result: []}
36+
)
37+
const updatedSection = {
38+
...section,
39+
lessons: updatedLessons.result,
40+
position: index + 1
41+
}
42+
43+
return {
44+
result: [...result, updatedSection],
45+
lessonCounter: updatedLessons.lessonCounter
46+
}
47+
}
48+
49+
const { result } = sections.reduce(sectionReducer, {lessonCounter: 0, result: []})
50+
51+
console.log(JSON.stringify(result, null, 2))

0 commit comments

Comments
 (0)