Last active
December 21, 2015 23:29
-
-
Save chreke/6382345 to your computer and use it in GitHub Desktop.
js examples
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// The classic for-loop | |
var strings = ['1', '2', '3'], | |
numbers = []; | |
for (var i = 0; i < strings.length; i++) { | |
var number = parseInt(strings[i]); | |
numbers.push(number); | |
} | |
// numbers == [1, 2, 3] | |
// How can we fix this? | |
function map(array, fun) { | |
var newArray = []; | |
for (var i = 0; i < array.length; i++) { | |
newArray.push(fun(array[i])); | |
} | |
return newArray; | |
} | |
var strings = ['1', '2', '3'], | |
numbers = map(strings, parseInt); | |
// numbers == [1, 2, 3] | |
// Filter And Reduce | |
filter([1, 2, 3, 4], function (x) { | |
return x % 2 == 0; | |
}); | |
// Returns [2, 4] | |
reduce([1, 2, 3, 4], function (acc, x) { | |
return acc + x; | |
}) | |
// Returns 10 | |
// Map + Filter | |
var strings = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'], | |
numbers = map(strings, parseInt), | |
even = filter(numbers, function (x) { | |
return x % 2 == 0; | |
}); | |
even[0]; | |
// Returns 2 | |
// Iterative Fibonacci Sequence | |
var prev = 0, next = 1, result; | |
while (true) { | |
if (prev > 1000) { | |
result = prev; | |
break; | |
} else { | |
var tmp = prev; | |
prev = next; | |
next = tmp + prev; | |
} | |
} | |
// ArrayIterator | |
function StopIteration () {} | |
function Iterator(array) { | |
var i = 0; | |
this.next = function () { | |
if (i < array.length) { | |
return array[i++]; | |
} else { | |
throw new StopIteration(); | |
} | |
} | |
} | |
var i = new Iterator([1, 2, 3]); | |
i.next(); // Returns 1 | |
i.next(); // Returns 2 | |
i.next(); // Returns 3 | |
i.next(); // Uncaught #<StopIteration> | |
// Exhaust | |
function exhaust(iterator) { | |
var result = []; | |
while (true) { | |
try { | |
result.push(iterator.next()); | |
} catch (e if e instanceof StopIteration) { | |
return result | |
} | |
} | |
} | |
// Take | |
function take(iterator, n) { | |
var result = []; | |
for (var i = 0; i < n; i++) { | |
result.push(iterator.next()); | |
} | |
return result; | |
} | |
take(new Iterator([1, 2, 3, 4]), 2); | |
// returns [1, 2] | |
// Map | |
function imap(iterator, fun) { | |
var next = function () { | |
return fun(iterator.next()); | |
} | |
return { next: next } | |
} | |
var strings = new Iterator(['1', '2', '3']); | |
integers = imap(strings, parseInt); | |
take(integers, 3); | |
// Returns [1, 2, 3] | |
// Filter | |
function ifilter(iterator, fun) { | |
var next = function () { | |
while (true) { | |
var value = iterator.next(); | |
if (fun(value)) { | |
return value; | |
} | |
} | |
} | |
return { next: next }; | |
} | |
var strings = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'], | |
stringIter = new Iterator(strings), | |
numbers = imap(stringIter, parseInt), | |
even = ifilter(numbers, function (x) { | |
return x % 2 == 0; | |
}); | |
even.next(); | |
// Returns 2 | |
// Fibonacci | |
function Fibonacci() { | |
var prev = 0, next = 1; | |
this.next = function () { | |
var tmp = prev; | |
prev = next; | |
next = tmp + next; | |
return tmp; | |
} | |
} | |
var pred = function (x) { return x > 1000 }; | |
ifilter(new Fibonacci(), pred).next(); | |
// Returns 1597 | |
// Isplit | |
function isplit(string, separator) { | |
var offset = 0, | |
next = function () { | |
var index = string.indexOf(separator, offset); | |
if (index > -1) { | |
var substr = string.slice(offset, index); | |
offset = index + separator.length; | |
return substr; | |
} | |
throw new StopIteration(); | |
} | |
return {next: next}; | |
} | |
{ | |
name: 'John Doe', | |
email: '[email protected]', | |
phone: '01632 960704' | |
} | |
"{name: 'John Doe', email: '[email protected] ...}" | |
"{name: 'Jane Doe', email: '[email protected] ...}" | |
function findPerson(json, email) { | |
var tokens = isplit(json, "\n"), | |
people = imap(tokens, JSON.parse); | |
return ifilter(people, function (x) { | |
return x.email == email; | |
}).next(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment