Skip to content

Instantly share code, notes, and snippets.

@chreke
Last active December 21, 2015 23:29
Show Gist options
  • Save chreke/6382345 to your computer and use it in GitHub Desktop.
Save chreke/6382345 to your computer and use it in GitHub Desktop.
js examples
// 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: 'john.doe@hotmail.com',
phone: '01632 960704'
}
"{name: 'John Doe', email: 'john.doe@hotmail.com ...}"
"{name: 'Jane Doe', email: 'jane.doe@yahoo.com ...}"
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