[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

map、filterなどを使う時の便利な関数(__noSuchMethod__)

Array#mapなどを使う時、配列の要素に対して要素のメソッドを適用したいことがよくあるけど、普通はこう書かなきゃいけない。

[1, 2, 3, 4, 5].map(function (n) { return n.toString() });

こう書きたい。

[1, 2, 3, 4, 5].map(expand.toString()); // expandが1, 2, 3, 4, 5に置換されるようなイメージ

下のようにすれば、単にメソッドを適用したい時にいちいち無名関数を書かなくてよくなる。

var expand = {
  __noSuchMethod__: function __noSuchMethod__(prop, args)
    function (parent) parent[prop].apply(parent, args)
};

"__defineGetter__ __defineSetter__ hasOwnProperty\
 isPrototypeOf __lookupGetter__ __lookupSetter__\
 __parent__ propertyIsEnumerable __proto__ toSource\
 toString toLocaleString unwatch valueOf watch".split(" ")
  .forEach(function (prop) {
    expand[prop] = function () expand.__noSuchMethod__(prop, arguments);
  });


var cookies = document.cookie.split(";").map(expand.split("="));
//[["name", "javascripter"], ["last", "1222896080467"], ["token", "4jfe8rn3nr0x"], ["expires", "Thu, 01 Jan 1970 00:00:00 GMT"]]

cookies.map(expand.join("=")).join(";");
// "name=javascripter;last=1222896080467;token=4jfe8rn3nr0x;expires=Thu, 01 Jan 1970 00:00:00 GMT"

function I(o) o;
Array.map(document.querySelectorAll("div"), expand.querySelector("a")).filter(I);
//[a, a, a, a.autopagerize_link javascript:void(0), a.autopagerize_link javascript:void(0), a]

便利。