Edit in JSFiddle

    $(function () {
      doEach();
      doMap();
      doReduce();
      doFilter();
      doChain();
    });

/// <reference path="http://code.jquery.com/jquery-1.9.0.js"/>
/// <reference path="underscore-1.4.3.js"/>

// (1) eachメソッド
// each(obj, iterator) 	objコレクションの各項目に対して、iterator関数の処理を行う
/*
コレクションの要素の列挙を行い、要素ごとに処理を行います。引数には処理対象コレクションオブジェクト、要素ごとに行いたい処理を定義した関数を指定します。

 関数の引数にはコレクションの要素が渡されますので、その要素を使って処理を行います。サンプルでは、コレクションの要素をもとに、HTMLの項目に要素を追加しています
 */
function doEach() {
  var source = ["太郎", "二郎", "三郎"];
  _.each(source, function (x) {
  	$("#each").append($("<li>").text(x));
  });
}

// (2) mapメソッド
//map(obj, iterator) 	objコレクションの各項目に対する、iterator関数による射影を返す
/*
コレクションの射影を取得します。射影とはそれぞれの要素に指定した変換処理を行い、その結果をコレクションとして取得する操作です。引数には処理対象コレクションオブジェクト、射影操作を定義した関数を指定します。

 関数の引数にはコレクションの要素が渡されますので、その要素を元に変換処理を行います。その変換した値で構成されるコレクションが、戻り値として戻されます。

 サンプルでは、コレクションの要素を使って「Hello name!」形式の文字列に変換しています
*/
function doMap() {
  var source = ["太郎", "二郎", "三郎"];
  var results = _.map(source, function (x) {
  	return "Hello " + x + "!"; 
  });
  for (var key in results) {
    $("#map").append($("<li>").text(results[key]));
  }
}

// (3) reduceメソッド
//reduce(obj, iterator, memo) 	objコレクションの先頭から、itarator関数を使用した畳み込み計算を行った結果を返す。memoには初期値を設定する
/*
コレクションの各要素の畳み込み処理を行います。畳み込み処理とは、サンプルのように全要素の合計を集計したりするための処理です。

 その動作は要素の先頭から処理を開始し、まずは1+2=3の計算を行います。次にこの計算結果を使って、(1+2)+3=3+3=6、((1+2)+3)+4=(3+3)+4=6+4=10、といったように全要素に対して順番に計算を行っていきます。

 引数には処理対象コレクションオブジェクト、畳み込み処理を定義した関数、最初の要素と処理を行う際の初期値(サンプルでいえば、x+1=nと計算するためのxの値)を指定します。

 関数の引数にはそれまでの演算結果、次の要素の値の2つの引数が渡されますので、これらを使った演算処理を行います。そして、最終的な演算結果が戻り値として返されます。

 サンプルでは、総和を求めるために、2つの引数を足し合わせる処理を行っています
*/
function doReduce() {
  var source = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  var sum = _.reduce(source, function (x, y) {
  	return x + y; }, 0);
  $("#reduce").text(sum);
}

// (4) filterメソッド
//filter(obj, iterator) 	objコレクションの各項目の内、iterator関数で指定した条件に合致する項目のみに絞り込んだ新たなコレクションを返す
/*
コレクションの要素の絞り込みを行います。引数には処理対象コレクションオブジェクト、絞り込み条件を表す関数を指定します。

 関数の引数にはコレクションの要素が渡されますので、その要素を使って、絞り込みたい要素の時にtrueを返します。すると、絞り込まれた要素で構成される新しいコレクションが、戻り値として返されます。

 サンプルでは、数値のコレクションのうち、偶数(=2で割り切れるもの)のみ抽出しています
*/
function doFilter() {
  var source = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  var results = _.filter(source, function (x) {
  	return x % 2 == 0;
  });
  for (var key in results) {
    $("#filter").append($("<li>").text(results[key]));
  }
}

// (5) chainメソッド
//chain(obj) 	objコレクションに対する操作メソッドを、メソッドチェーンでつなげて書けるようにする。chainメソッドの後に繋げるメソッドでは、obj引数を省略できる
/*
これまで紹介したような各コレクション処理を組み合わせて使いたい場合もあります。そんな時、chainメソッドを使うことで、各処理をメソッドチェーンでつなげて記述できるようになります。

 引数には起点となる処理対象コレクションオブジェクトを指定し、あとは各コレクション操作をつなげていきます。この時のポイントは、それぞれのコレクション操作メソッドの引数に処理対象コレクションオブジェクトが不要になっていることです。

 サンプルでは、数字のコレクションのうち奇数のものをfilterメソッドで絞り込み、mapメソッドで「Odd number n」形式に変換し、eachメソッドでHTMLの項目への要素追加、という一連の流れをメソッドチェーンで指定しています
*/
function doChain() {
  var source = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  _.chain(source)
    .filter(function (x) { return x % 2 != 0; })
    .map(function (x) { return "Odd number " + x; })
    .each(function (x) { $("#chain").append($("<li>").text(x)); });
}
   <div>
    each :
    <ul id="each"></ul>
  </div>
  <div>
    map : 
    <ul id="map"></ul>
  </div>
  <div>
    sum : <span id="reduce"></span>
  </div>
  <div>
    filter :
    <ul id="filter"></ul>
  </div>
  <div>
    chain :
    <ul id="chain"></ul>
  </div>
 <hr> 
  From :http://www.buildinsider.net/web/bookjslib111/100