読者です 読者をやめる 読者になる 読者になる

ほんじゃら堂

めんどくさい仕事をラクにする作業自動化レシピ集

Underscore.js で文字列内の文字別出現回数を数える

Javascriptライブラリの中でも、

Underscore.jsが大変気に入っている。

Underscore.js

each、filter、map、reduce等

リスト操作、マップ操作関連の関数が

100以上含まれたユーティリティライブラリで、

他の言語にあってJavascriptにもあったらいいのにな、

と思うようなものをいい具合に用意してくれている。

作業効率化のための一括処理には欠かせないライブラリだ。

今回はUnderscore.jsに含まれるcountBy関数を使って

文字別出現回数取得関数を作ってみる。

charCounter関数を作る

文字の出現回数が分かって嬉しい状況というのが果たしてどれほどあるのか、

ちょっと疑問はあるが

誰かの役に立つことを祈って書いてみる。

charCounterという名前で関数を作成する。

var _ = require("underscore");
var here = require("here").here;

var charCounter = function (str) {
    var x = str.split("");
    return _.countBy(x, function (s) {
        return s;
    });
};

var data = here(/*
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod 
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim 
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea 
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate 
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat 
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
*/).unindent();

console.log(charCounter(data));

var data2 = "こんにちは、こんばんは。日本語もいけます。";
console.log(charCounter(data2));

charCounter関数は引数で渡した文字列内の文字をカウントして、

文字と出現回数のマップを返す。

中でUnderscore.jsのcountBy関数を使用している。

http://underscorejs.org/#countBy

countBy関数はリスト内の要素の出現回数を返してくれる関数だ。

charCounter関数内で文字列を1文字ずつのリストに分割して、

それをcountBy関数に渡している。

Underscore.jsは他のNode.jsライブラリと同じように

npmでインストールしてrequireすれば使用することができる。

今回のサンプルではUnderscore.jsとは別に、

「here」というライブラリを使用している。

これはNode.jsでヒアドキュメント(複数行のテキスト)を

使用しやすくするためのライブラリだ。

www.npmjs.com

おわり

Underscore.jsでcountBy関数だけ紹介するのもアレなので、

他の関数についてもまた追々サンプルを紹介したい。

ノンプログラマのためのJavaScriptはじめの一歩 (WEB+DB PRESS plus)

ノンプログラマのためのJavaScriptはじめの一歩 (WEB+DB PRESS plus)