「Arrayにuniqってあったけ?」という話をなんとなく聞いていて、実装を考える。
with (Array) { prototype.uniq1 = function() { var src = this; var dest = new Array; var buf = src[0]; for(var i=1; i<=src.length; buf=src[i++]) { if(!src[i] || buf != src[i]) dest.push(buf); } return dest; } prototype.uniq2 = function() { var src = this; var dest = new Array; var a, b = src[0]; var i = 1; function next() { a = b; return (b = src[i++]); } while(next()) { if(a != b) dest.push(a); } dest.push(a); return dest; } } var a = ["A", "a", "a", "a", "b", "c", "c", "D", "d", "d"]; print(a.uniq1()); print(a.uniq2());
関係ないけど、関数内関数のthisはグローバルオブジェクトであることに気付く。