バリケンのJavaScript日記 RSSフィード

2006-10-30

[] 「たのしいRuby 第2版」の練習問題をJavaScriptで解く(5)  「たのしいRuby 第2版」の練習問題をJavaScriptで解く(5) - バリケンのJavaScript日記 を含むブックマーク はてなブックマーク -  「たのしいRuby 第2版」の練習問題をJavaScriptで解く(5) - バリケンのJavaScript日記  「たのしいRuby 第2版」の練習問題をJavaScriptで解く(5) - バリケンのJavaScript日記 のブックマークコメント

きょうも「たのしいRuby」の練習問題をJavaScriptで解いてみるよ。きょうはこちら

(1) "Ruby is an object oriented programming language"という文字列があります。この文字列を使って次の処理を行ってください。

(a)文字列に含まれる各単語を要素とする配列を作ってください。

(b)(a)の配列アルファベット順にソートしてください。

(c)(a)の配列大文字と小文字の区別をせずにアルファベット順にソートしてください。

(d)すべての単語の先頭を大文字にして"Ruby Is An Object Oriented Programming Language"にしてください。

(f)文字列に含まれる文字とその数を次のような形式で表示させてください(空白文字が6つ、'R'が1つ、'a'が4つ‥‥という意味です)。

' ': ******
'R': *
'a': ****
'b': **
...

たのしいRuby 第2版

じゃあ、ぼくの答えだよ。まずは(a)から。

var str = "JavaScript is an object oriented programming language";
var ary = str.split(/\s+/);

次は(b)だね。

ary.sort();

その次は(c)だよ。

ary.sortBy(function(x) { return x.toLowerCase(); });

次は(d)だね。うーん、RubyString#capitalizeメソッドみたいなものはないのかな?

str.replace(/\b\w/g, function(word){ return word.toUpperCase(); });

さいごに(e)だよ。これもRubyなら「'*'という文字を3個」を「'*' * 3」と書けるのになあ。

var str = "JavaScript is an object oriented programming language";

str.toArray().sort().uniq().each(function(char) {
  var result = "'" + char + "': ";
  for (var i = str.replace(new RegExp(char, "g"), "").length; i < str.length; i++) {
    result += "*";
  }
  print(result + '\n');
});

ちなみにuniqメソッドはprototype.jsの1.5.0からサポートされるみたい。1.4.0だと次のように自分で定義してね。

Array.prototype.uniq = function () {
  return this.inject([], function(array, value) {
    return array.include(value) ? array : array.concat([value]);
  });
}
トラックバック - http://javascript.g.hatena.ne.jp/muscovyduck/20061030