
62
2 章 第一級関数と作用的プログラミング
SQL
の
SELECT
文と似た効力を持ち、かつテーブルデータの形を維持する関数が必要
です。次に定義する
project
関数は、
SELECT
文の代役として使用できます
†
。
function project(table, keys) {
return _.map(table, function(obj) {
return _.pick.apply(null, construct(obj, keys));
});
};
project
関数はそれぞれのオブジェクトに
_.pick
関数を実行し、ホワイトリストさ
れたキーを新しいオブジェクトに格納します。こうして、テーブルデータの抽象型を
維持します。
var editionResults = project(library, ['title', 'isbn']);
editionResults;
//=> [{isbn: "0262010771", title: "SICP"},
// {isbn: "0262510871", title: "SICP"},
// {isbn: "1935182641", title: "Joy of Clojure"}];
このように、
project
関数はテーブルのようなデータ構造を返します。そのため、
このデータに再度
project
関数を適用してもう一段階処理することができます。
var isbnResults = project(editionResults, ['isbn']); ...