ひよっこPGのブログ

主に、技術メモや英語たまにギター関連のことも書いているブログです。

”JavaScriptで学ぶ関数型プログラミング”を読む上での メモ

JavaScriptで学ぶ関数型プログラミング

JavaScriptで学ぶ関数型プログラミング

この本が今年の1月に発売されて、少しずつ読み進めています。
読み進めていて、色々なメソッドやUnderScore.jsを使って説明などをしているので、ネットで調べながら読んでます。
その時に調べたことを、いくつかメモします。

Arrayのsortメソッド

// 引数なしで渡すと辞書順に並べる。
var test1 = [0, -1, -2].sort();
console.log(test1);
//=> [-1, -2, 0]
var test2 = ["c", "b", "a"].sort();
console.log(test2);
//=> ["a", "b", "c"]

// コンパレータ関数を渡す
function comparator(x, y){
	return x >= y;
}

var test3 = [0, -1, -2].sort(comparator);
console.log(test3);
//=> [-2, -1, 0]

f:id:buzzword111:20140124103635p:plain

test3 の結果について。
引数にコンパレータ関数を渡す場合は、コンパレータ関数によってソートします。
そのソート方法は、下記の画像のようになるみたいです。
f:id:buzzword111:20140124104607p:plain

Underscore.jsのreduceメソッド

_.reduce(list, iterator, [memo], [context])
[ ]で囲んでいる引数は、省略可能です。

listの要素を、一つの値にまとめるメソッド。
listに入っている値を iterator関数に一個ずつ渡してまとめます。
[memo] まとめた変数の初期値です。

下記は、reduceメソッドを使って配列の要素を一つの文字列にまとめています。

var array = ["a", "b", "c"];
var test1  = _.reduce(array, function(result, value){result +=value; return result;}, "");
console.log(test1);
//=> "abc"
var test2  = array.join("");
console.log(test2);
//=> "abc"

iterator(result, value)
第一引数 resultに、まとめ先の変数が渡され
第二引数 valueに、一個ずつ取り出した値が渡されます。