【ハウツー】
続いてJSINQを自分のJavaScriptコードで使用する方法を見てみよう。
JSINQのディストリビューションはZIPファイルとして配布されているので、ダウンロードして任意のディレクトリに展開する。JSINQの利用には展開したディレクトリ直下のsourceディレクトリに含まれているjsinq.jsとjsinq-query.jsが必要になるため、HTMLで以下のようにしてインクルードする。
<script type="text/javascript" src="jsinq.js"></script>
<script type="text/javascript" src="jsinq-query.js"></script>
以下のJavaScriptコードはJSINQを使用した簡単な検索の例だ。クエリ内で$0のようにプレースホルダで記述した部分にはquery.setValue()で指定したjsinq.Enumerableオブジェクトがセットされる。jsinq.Enumerableは.NET FrameworkのSystem.Linq.EnumerableのAPI互換の実装だ。また、前述のようにクエリ内では任意のJavaScriptコードで検索条件などを指定することができる。
var names = ['Bob', 'Alice', 'Joe', 'Frank', 'Arthur', 'Marcy'];
var enumerable = new jsinq.Enumerable(names);
var query = new jsinq.Query(' \
from name in $0 \
where name.toLowerCase().indexOf("a") > -1 \
orderby name descending \
select name \
');
query.setValue(0, enumerable);
var result = query.execute();
var enumerator = result.getEnumerator();
while (enumerator.moveNext()) {
var name = enumerator.current();
document.write(name + '<br>');
}
ここでは文字列の配列を検索しているが、任意のオブジェクトやDOMノードのリストに対して検索を行うことも可能だ。以下はDOMノードの検索を行う場合の例で、href属性に"google.co.jp"が含まれるaタグを検索している。
var elements = document.getElementsByTagName('a');
var enumerable = new jsinq.Enumerable(elements);
var query = new jsinq.Query(' \
from e in $0 \
where e.href.indexOf("google.co.jp") > -1 \
select e \
');
query.setValue(0, enumerable);
var result = query.execute();
var enumerator = result.getEnumerator();
while (enumerator.moveNext()) {
var e = enumerator.current();
document.write(e.text + ': ' + e.href + '<br>');
}
JSINQではLINQのクエリだけでなく、jsinq.Enumerableオブジェクトが提供するメソッドを使用して検索を行うこともできる。以下の例を見てほしい。
var names = ['Bob', 'Alice', 'Joe', 'Frank', 'Arthur', 'Marcy'];
var enumerable = new jsinq.Enumerable(names);
var namesThatStartWithAnA = enumerable.where(function(name) {
return name.charAt(0) == 'A';
}).orderByDescending(function(name){
return name;
});
var enumerator = namesThatStartWithAnA.getEnumerator();
while (enumerator.moveNext()) {
var name = enumerator.current();
document.write(name + '<br>');
}
検索条件やソート対象をJavaScript関数としてjsinq.Enumerableオブジェクトのメソッドに渡している。コードは複雑になるものの、より自由度の高い処理を行うことが可能だ。
今回のサンプルコード程度の例であれば配列を直接検索したり、DOM操作で検索を行う場合と大差ないが、検索対象となるオブジェクトの構造や検索条件などが複雑になればなるほどJSINQの記述能力の高さが活きてくるはずだ。
とくにAjaxを活用したアプリケーションではHTMLやXMLなどのDOM操作や、JSONからデシリアライズしたJavaScriptオブジェクトを検索したりといった処理を行うことが多いはずだ。このような場合にJSINQを利用することで複雑な処理を簡潔に記述できるようになるだろう。
| MS製Ajaxライブラリが2つ同時リリース! 強化点と性能を早速チェック [2009/11/6] |
| あのBBCが作った超実力派JavaScriptライブラリ"Glow"を徹底解剖する [2009/7/15] |
| サーバサイドJavaScriptライブラリ「Narwhal」のAPIを知る [2009/7/10] |
| サーバサイドJavaScriptライブラリ「Narwhal」を使ってみよう [2009/6/26] |
| JsonSQL登場 - JSONをSQLで操作 [2008/1/17] |
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
[ゲーム質問状]「ドラゴンズドグマ」 ゲームブックのドキドキ感を今の技術で [13:30 5/27] ホビー |
|
「デビルサバイバー」&「氷結鏡界」シリウスでマンガ化 [13:15 5/27] ホビー |
|
[SKE48]松井玲奈、17人ランクインで手応え「飛躍できている」 [13:12 5/27] ホビー |
|
【レポート】【2010年非オタ編】成功したと思う歴代深夜アニメランキング [13:00 5/27] ホビー |
|
[東京スカイツリータウン]1/2000の模型が登場 スカイツリーやオフィス、駅など精巧に再現 [12:00 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。