The first is String.prototype.split():
Code:
var array1 = word1.split("");
The third:
Code:
var Functional = {
map: function(f, a) {
for (var i = 0, n = a.length, r = []; i < n; ++i)
r[i] = f(a[i], i);
return r;
},
filter: function(f, a) {
for (var i = 0, r = []; i < a.length; ++i)
if (f(a[i], i))
r[r.length] = a[i];
return r;
},
compose: function(/* f1 [, f2 [, ... [, fn]]] */) {
var fs = Array.prototype.slice.call(arguments);
return function() {
var args = Array.prototype.slice.call(arguments);
for (var i = fs.length - 1; i >= 0; --i)
args.unshift(fs[i].apply(this, args));
return args[0];
};
},
flip: function(f) {
return function(a, b) {
return f.call(this, b, a);
};
},
curry: function(f, l, a) {
l = (typeof l === "number" ? l : (f.length || 0));
a = a || [];
return function() {
var m = a.concat(Array.prototype.slice.call(arguments));
return m.length < l ? Functional.curry(f, l, m) : f.apply(this, m);
};
},
Operators: {
lookup: function(a, i) {
return a[i];
},
equals: function(a, b) {
return a === b;
}
}
};
var parallels = (function(F, O) {
return function(a1, a2) {
return F.filter(F.compose(O.equals, F.flip(F.curry(O.lookup, 2)(a2))), a1);
};
})(Functional, Functional.Operators);
And the second, using the same Functional object as above:
Code:
function doForAllParallels(a1, a2, f) {
return Functional.map(function(v, k) {
if (a2[k] === v)
return f(v, k);
}, a1);
}
Bookmarks