ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

JavaScriptのapplyの黒い使い方


うそだーと思ったら本当になりました。

Haskell的なconcatって?

Haskellのconcatは、n次元のリストをn-1次元にする関数です。(n=2,3,..)
RubyだとArray#flatten(1)ですね。これ、JavaScriptでやろうと思うとこうなるようです

[].concat.apply([], [[1],[2,3],[4]])
// [ 1, 2, 3, 4 ]

お、おう…

とりあえずまずはapplyの説明から

あまりお目にかかりませんが、JavaScriptのapplyは、当該のメソッドにおけるthisを、引数にとったオブジェクトにしてしまうものです。

function sayName() {
   return this.Name;
}
var person = { name: "yuuxx" };
console.log(sayName.apply(person)); // "yuuxx"

みたいな感じで使います。
で、このapply、2つ引数を渡すことができて、その2つ目は関数に渡す値を納めた配列です。

そしてconcatの説明

JavaScriptのarray.concatは、複数の引数を受け取ると、それらを元の配列に連結して返します。
もうお分かりですね。複数の引数を配列で渡すので、結果的に配列の次元がひとつ下がるというわけです。納得するとなんだそれだけのことか、となってしまいそうですがなかなかの編隊挙動です。