Skip to content

Commit cd12121

Browse files
committed
feat(sumNestedArray): Add sumNestedArray module
1 parent 935ef47 commit cd12121

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { identity } from '../utils';
2+
3+
const sumNestedArrayIter = arr => {
4+
let sum = 0;
5+
arr.forEach(el => {
6+
if (Array.isArray(el)) {
7+
sum += sumNestedArrayIter(el);
8+
} else {
9+
sum += el;
10+
}
11+
});
12+
return sum;
13+
};
14+
15+
const sumNestedArray = ([n1, ...rest]) => {
16+
if (n1 === undefined) return 0;
17+
18+
const n1Result = Array.isArray(n1) ? sumNestedArray(n1) : n1;
19+
const restResult = sumNestedArray([...rest]);
20+
return n1Result + restResult;
21+
};
22+
23+
const sumNestedArrayCPS = ([n1, ...rest], cont = identity) => {
24+
if (n1 === undefined) return cont(0);
25+
26+
const cb = Array.isArray(n1)
27+
? restResult =>
28+
sumNestedArrayCPS([...n1], n1Result => cont(n1Result + restResult))
29+
: restResult => cont(n1 + restResult);
30+
31+
return sumNestedArrayCPS([...rest], cb);
32+
};
33+
34+
export { sumNestedArrayIter, sumNestedArray, sumNestedArrayCPS };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import each from 'jest-each';
2+
import {
3+
sumNestedArray,
4+
sumNestedArrayCPS,
5+
sumNestedArrayIter,
6+
} from './sumNestedArray';
7+
8+
[sumNestedArrayIter, sumNestedArray, sumNestedArrayCPS].forEach(fn => {
9+
describe(`${fn.name}`, () => {
10+
each`
11+
arr | expected
12+
${[]} | ${0}
13+
${[1]} | ${1}
14+
${[1, 2, 3, 4, 5]} | ${15}
15+
${[1, [2, 3], 4, 5]} | ${15}
16+
${[1, [2, [3], 4], 5]} | ${15}
17+
${[1, [], [2, [], [3], 4], 5]} | ${15}
18+
`.test(
19+
'should return $expected when called with $arr',
20+
({ arr, expected }) => {
21+
expect(fn(arr)).toBe(expected);
22+
},
23+
);
24+
});
25+
});

0 commit comments

Comments
 (0)