Skip to content

Commit e9367a1

Browse files
committed
JavaScript examples refactored
1 parent 6e0d4b5 commit e9367a1

File tree

6 files changed

+107
-98
lines changed

6 files changed

+107
-98
lines changed

JavaScript/1-memoize.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
'use strict';
2+
3+
function memoize(fn) {
4+
let cache = {};
5+
return (...args) => {
6+
let key = args + '';
7+
let val = cache[key];
8+
if (val) return val;
9+
else {
10+
let res = fn(...args);
11+
cache[key] = res;
12+
return res;
13+
}
14+
}
15+
}
16+
17+
function sumSeq(a, b) {
18+
console.log('Calculate sum');
19+
let r = 0;
20+
for (let i = a; i < b; i++) r += i;
21+
return r;
22+
}
23+
24+
let mSumSeq = memoize(sumSeq);
25+
26+
console.log('First call mSumSeq(2, 5)');
27+
console.log('Value: ' + mSumSeq(2, 5));
28+
console.log('Second call mSumSeq(2, 5)');
29+
console.log('From cache: ' + mSumSeq(2, 5));
30+
console.log('Call mSumSeq(2, 6)');
31+
console.log('Calculated: ' + mSumSeq(2, 6));

JavaScript/2-speed.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
'use strict';
2+
3+
const LOOP = 10000;
4+
5+
function memoize(fn) {
6+
let cache = {};
7+
return (...args) => {
8+
let key = args + '';
9+
let val = cache[key];
10+
if (val) return val;
11+
else {
12+
let res = fn(...args);
13+
cache[key] = res;
14+
return res;
15+
}
16+
}
17+
}
18+
19+
function fib(n) {
20+
return (n <= 2) ? 1 : fib(n-1) + fib(n-2);
21+
}
22+
23+
function speedTest(name, fn, args, count) {
24+
let start = new Date().getTime();
25+
for (let i = 0; i < count; i++) {
26+
fn.apply(null, args);
27+
}
28+
let end = new Date().getTime();
29+
let time = end - start;
30+
console.log(name + ' * ' + count + ' : ' + time);
31+
}
32+
33+
speedTest('fib(20)', fib, [20], LOOP);
34+
fib = memoize(fib);
35+
speedTest('memoized fib(20)', fib, [20], LOOP);

JavaScript/3-cacheSize.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
'use strict';
2+
3+
function memoize(fn, length) {
4+
let cache = {};
5+
let counter = 0;
6+
return (...args) => {
7+
let key = args + '';
8+
let val = cache[key];
9+
let res = val ? val : fn(...args);
10+
if (!val) {
11+
if (++counter > length) {
12+
delete cache[Object.keys(cache)[0]];
13+
}
14+
cache[key] = res;
15+
}
16+
return res;
17+
}
18+
}
19+
20+
function max(a, b) {
21+
console.log('Calculate: ' + a + '+' + b);
22+
return a > b ? a : b;
23+
}
24+
25+
let mMax = memoize(max, 3);
26+
27+
console.log('mMax(10, 8)');
28+
mMax(10, 8);
29+
console.log('mMax(1, 15)');
30+
mMax(1, 15);
31+
console.log('mMax(12, 3)');
32+
mMax(12, 3);
33+
console.log('mMax(15, 2)');
34+
mMax(15, 2);
35+
console.log('mMax(1, 15)');
36+
mMax(1, 15);
37+
console.log('mMax(10, 8)');
38+
mMax(10, 8);
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ let memoizeAsync = (lib, fnName) => {
99
let fn = lib[fnName];
1010
let cache = {};
1111
console.log('override ' + fnName);
12-
lib[fnName] = function(...args) {
12+
lib[fnName] = (...args) => {
1313
console.dir({call: fnName, args, cache });
1414
let cb = args.pop();
1515
let record = cache[args[0]];
@@ -30,9 +30,9 @@ let memoizeAsync = (lib, fnName) => {
3030

3131
memoizeAsync(api.fs, 'readFile');
3232

33-
api.fs.readFile('memoizeAsync.js', (err, data) => {
33+
api.fs.readFile('4-async.js', (err, data) => {
3434
console.log('data length: ' + data.length);
35-
api.fs.readFile('memoizeAsync.js', (err, data) => {
35+
api.fs.readFile('4-async.js', (err, data) => {
3636
console.log('data length: ' + data.length);
3737
});
3838
});

JavaScript/memoize.js

Lines changed: 0 additions & 46 deletions
This file was deleted.

JavaScript/memoize2.js

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
 (0)